我遇到了VS 2012中最奇怪的行为(我在用cpp写作).
我在变量上单击"添加监视",并显示"标识符未定义".
这是代码的示例:
for (int j=0;j<32;j++)
{
unsigned char curValue=desc1.at<unsigned char>(0,j);
printf("%s\n",curValue);
}
Run Code Online (Sandbox Code Playgroud)
我不得不使用printf来显示curValue的值.大声笑.
有没有人遇到过这种行为?
编辑:发生这种情况更奇怪.调试以下代码时:
int b1[8];
for (int k=0;k<7;k++)
b1[k]=0;
char q=curValue;
int t=0;
while (q!=0){
b1[t++]=q%2;
q=q/2;
}
Run Code Online (Sandbox Code Playgroud)
调试器只是跳过b1 [k] = 0的循环;
请注意,即使在循环内部,curValue也是未定义的.
谢谢!
当我在代码中添加以下行时:
std::string sFrameTag
Run Code Online (Sandbox Code Playgroud)
我收到以下链接器错误:
错误34错误LNK2005:“ public:__thiscall std :: basic_string,class std :: allocator> ::〜basic_string,class std :: allocator>(void)”(?? 1?$ basic_string @ DU?$ char_traits @ D @已在VFPAnalyzerApi.lib(VFPEvaluation.obj)msvcprtd.lib中定义的std @@ V?$ allocator @ D @ 2 @@ std @@ QAE @ XZ)
我在C / C ++->代码生成->运行时库下查看了项目属性,并将其从更改为/MDd,/MD 并以某种方式消失了错误。有人可以解释一下我到底做了什么更改,为什么有所作为?
谢谢!!!
我还没有找到任何方法来使用openCV训练新的潜伏svm探测器模型.我目前正在使用xml文件中给出的现有模型,但我想训练自己的模型.
这样做有什么方法吗?
谢谢,
吉尔.
我正在使用 gcc 版本 4.7.2 开发 Ubuntu 12.10。
\n\n我正在尝试制作以下 makefile:
\n\nCC = g++\nCCFLAGS = -fPIC -O3 -Wall -ffast-math -msse -msse2 -fopenmp\nLINKFLAGS = -shared -Wl -fopenmp -lgomp\n\nINPUT = im2col.cpp fastpool.cpp local_response_normalization.cpp neuron.cpp\nTARGET = libcpputil.so\n\n# If we are going to use MKL, we include additional flags\nMKL_FLAGS = -D DECAF_USE_MKL\nMKL_LINK_FLAGS = -lmkl_rt\n\nall: $(INPUT)\n $(CC) -c $(CCFLAGS) $(INPUT)\n $(CC) $(LINKFLAGS) -o $(TARGET) *.o\nall_mkl: $(INPUT)\n $(CC) -c $(CCFLAGS) $(MKL_FLAGS) $(INPUT)\n $(CC) $(LINKFLAGS) $(MKL_LINK_FLAGS) -o $(TARGET) *.o\nspeedtest_lrn: speedtest_lrn.cpp local_response_normalization.cpp\n $(CC) $(CCFLAGS) -lgomp -o speedtest_lrn speedtest_lrn.cpp …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过运行 NVIDIA-Linux-x86_64-331.49.run 在 Ubuntu 13.10 上安装 Nvidia 驱动程序。
我在 /etc/modprobe.d/blacklist-file-drivers.conf 下创建了一个黑名单文件并将 nouveau 添加到列表中。
另外,我在杀死我的显示管理器(sudo service lightdm stop)后运行了安装。我正在使用 gcc 4.8。
我收到以下错误(来自安装日志文件):
错误:无法加载内核模块“nvidia.ko”。当此内核模块是针对错误或配置不正确的内核源构建的,使用的 gcc 版本与用于构建目标内核的版本不同,或者存在 rivafb、nvidiafb 或 nouveau 等驱动程序时,这种情况最常发生并阻止 NVIDIA 内核模块获得 NVIDIA 图形设备的所有权,或者此 NVIDIA Linux 图形驱动程序版本不支持此系统中安装的 NVIDIA GPU。
有人可以解释一下问题是什么,我该如何解决它以便我最终可以安装驱动程序?
谢谢,
吉尔
我正在尝试使用OpenCV的人脸识别模块来识别视频中的2个主题.我从视频中裁剪了第一个主题的30张脸部图像和第二个主体的20张脸部图像,我将这些用作我的训练集.
我已经测试了所有三种方法(特征脸,Fisherfaces和LBP直方图),但我没有在这两种方法中都取得好成绩.有时,第一个主题被分类为第二个主题,反之亦然,有时将错误检测分类为两个主题之一,有时视频中的其他人被分类为两个主题之一.
如何提高性能?扩大训练组会有助于改善训练效果吗?我可以考虑在C++中进行人脸识别吗?我认为这应该是一项简单的任务,因为我只想识别两个不同的主题.
这是我的代码(我在VS2012的Windows 8上使用OpenCV 2.4.7):
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <sstream>
#define EIGEN 0
#define FISHER 0
#define LBPH 1;
using namespace std;
using namespace cv;
/** Function Headers */
void detectAndDisplay( Mat frame , int i,Ptr<FaceRecognizer> model);
static Mat toGrayscale(InputArray _src) {
Mat src = _src.getMat();
// only allow one channel
if(src.channels() != 1) {
CV_Error(CV_StsBadArg, "Only Matrices with one channel are supported");
}
// create and return …Run Code Online (Sandbox Code Playgroud) 我在一个包含500,000个文件的目录上使用命令"dir".现在已经运行了15分钟.
有没有办法加快速度?也许是一个替代命令?
提前致谢,
吉尔.
我正在使用Matlab的dec2bin将十进制数转换为二进制字符串.但是,我得到了错误的结果.例如:
>> dec2bin(13339262925365424727)
ans =
1011100100011110100101001111010011000111111100011011000000000000
Run Code Online (Sandbox Code Playgroud)
我在C++实现和wolfram alpha中检查了两者,正确的结果是:
1011100100011110100101001111010011000111111100011011001001010111
Run Code Online (Sandbox Code Playgroud)
我使用Matlab的desc2bin有什么问题吗?
谢谢,
吉尔.
我正在尝试使用 panda 加载一个 128MB 的文件(谷歌搜索后我发现它比 open 或 np.loadtxt 快)。该文件有 1000 行,每行包含 65K 个值,这些值是 0 或 1,由单个空格分隔。
出于某种原因,这需要很长时间,我不知道为什么。128MB 对我来说听起来很小,Matlab 会在大约一分钟内加载它。
这是我的(简单)代码:
import os
import numpy as np
import pandas as pd
import time
DATA_DIR='D:\BinaryDescriptors3\ORBLearningIntermediatResults2'
TEST_DIR='yosemite_harris'
OUT_DIR='D:\BinaryDescriptors3\ORBLearningTripletsFinalResults'
PATCH_NUM=1000
data_filename=TEST_DIR+'_' + str(PATCH_NUM) + '_ORBresfile.txt'
data_filepath = os.path.join(DATA_DIR,data_filename)
s=time.time()
print "START"
data = pd.read_csv(data_filepath,delimiter=' ')
e=time.time()
print e-s
Run Code Online (Sandbox Code Playgroud)
它从未到达最后一行(我在终止它之前给了它 30 分钟)。为什么读取一个 128MB 的小文件需要这么长时间?
编辑:
尝试使用以下命令仅读取一行时:
数据 = pd.read_csv(data_filepath,delimiter='', nrows=1)
我收到以下错误:
Traceback (most recent call last):
File "C:\eclipse\plugins\org.python.pydev_3.7.1.201409021729\pysrc\pydevd.py", line 2090, in <module>
debugger.run(setup['file'], None, None) …Run Code Online (Sandbox Code Playgroud) 我正在使用以下超超级简单代码列出目录中的所有文件(Windows 8.1、Visual Studio Express 2013、C++):
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <limits>
#include <cstdio>
#include <iostream>
#include <fstream>
#include <bitset>
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
using namespace std;
void get_file_list(string DATA_DIR)
{
HANDLE hFind;
WIN32_FIND_DATA data;
hFind = FindFirstFile(LPCWSTR(DATA_DIR.c_str()), &data);
if (hFind != INVALID_HANDLE_VALUE) {
do {
printf("%s\n", data.cFileName);
} while (FindNextFile(hFind, &data));
FindClose(hFind);
}
}
int main(int argc, char** argv)
{
string DATA_DIR = "D:\\drobpox\\Dropbox\\BinaryDescriptors\\LFW\\DATA\\*.*";
//string DATA_DIR = "c:\\Users\\GilLevi\\Downloads\\GraphsSURF\\GraphsSURF\\bark\\*.jpg";
string OUT_DIR = "D:\\drobpox\\Dropbox\\BinaryDescriptors\\LFW\\LATCH_TXT_FILES\\LATCH8";
get_file_list(DATA_DIR);
}
Run Code Online (Sandbox Code Playgroud)
但是,我“hFind”总是等于“INVALID_HANDLE_VALUE”。我仔细检查了路径并尝试了各种不同的路径。
可能是因为我正在运行 …
我正在尝试使用openCV将这个简单的Matlab代码转换为C++:
localstd=sqrt(abs(ifft2(fft2(output).*gf)));
Run Code Online (Sandbox Code Playgroud)
它意味着取矩阵"输出"的fft,将其逐个元素与矩阵"gf"相乘,然后取出它的ifft然后取其大小.
我正在尝试以下简单的代码:
Mat complexI;
dft(output, complexI,cv::DFT_SCALE||DFT_COMPLEX_OUTPUT);
Mat copmlexI2=Mat(n,n,CV_32F);
mulSpectrums(complexI,gf,copmlexI2,DFT_COMPLEX_OUTPUT);
dft(copmlexI2,copmlexI2,cv::DFT_INVERSE||DFT_COMPLEX_OUTPUT);
Mat planes[]= {Mat::zeros(output.size(), CV_32F), Mat::zeros(output.size(), CV_32F)};;
split(copmlexI2, planes); // planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))
magnitude(planes[0], planes[1], planes[0]);// planes[0] = magnitude
Mat localstd = planes[0];
for (int i=0;i<localstd.rows;i++){
for (int j=0;j<localstd.cols;j++){
localstd.at<float>(i,j)= sqrt(localstd.at<float>(i,j));
}
}
for (int i=0;i<localstd.rows;i++){
for (int j=0;j<localstd.cols;j++){
localstd.at<float>(i,j)/= 255;
}
}
Run Code Online (Sandbox Code Playgroud)
这很简单.我正在拿"输出"的dft,将它的频谱乘以"df",然后取出它的ifft.接下来,我将结果分成实数和虚数平面并取大小.最后,我取其中的sqrt并用255除以标准化.
我得到的结果与我在Matlab中获得的结果非常不同.我在这里错过了什么?有关如何修复代码的任何想法?
提前致谢!