在C++的循环中,我经常遇到要使用的情况,++或者+=1我无法区分它们.例如,如果我有一个整数
int num = 0;
Run Code Online (Sandbox Code Playgroud)
然后在循环中我做:
num ++;
Run Code Online (Sandbox Code Playgroud)
要么
num += 1;
Run Code Online (Sandbox Code Playgroud)
他们都增加了价值num,但他们的区别是什么?我怀疑num++可以比工作更快num+=1,但如何?这种差异是否足以被忽视?
我有以下代码:
int M = 3;
int C = 5;
int match = 3;
for ( int k =0; k < C; k ++ )
{
match --;
if ( match == 0 && k = M )
{
std::cout << " equals" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误说:
错误:表达式必须是可修改的值
在那个"如果"线上.我不是想在这里修改"匹配"或"k"值,但为什么会出现这个错误?如果我只写它:
if ( match == 0 )
Run Code Online (Sandbox Code Playgroud)
没关系.有人可以向我解释一下吗?
我用matlab读取了一个图像
input = imread ('sample.jpeg');
Run Code Online (Sandbox Code Playgroud)
然后我做
imhist(input);
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:
??? Error using ==> iptcheckinput
Function IMHIST expected its first input, I or X, to be two-dimensional.
Error in ==> imhist>parse_inputs at 275
iptcheckinput(a, {'double','uint8','logical','uint16','int16','single'}, ...
Error in ==> imhist at 57
[a, n, isScaled, top, map] = parse_inputs(varargin{:});
Run Code Online (Sandbox Code Playgroud)
运行后size(input),我看到我的输入图像很大300x200x3.我知道第三个维度是用于颜色通道,但有没有办法显示这个直方图?谢谢.
我正在尝试将3通道图像更改为4通道,如下所示:
cv::VideoCapture video;
video.open("sample.avi");
cv::Mat source;
cv::Mat newSrc;
int from_to = { 0,0, 1,1, 2,2, 3,3 };
for ( int i = 0; i < 1000; i ++ )
{
video >> source;
cv::mixChannels ( source, 2, newSrc, 1, from_to, 4 );
}
Run Code Online (Sandbox Code Playgroud)
然后我得到了
too many input arguments in function call
Run Code Online (Sandbox Code Playgroud)
对于'mixChannels'系列.此外,我不确定我是否正确地为我的目标提供论据.有人能帮我吗?谢谢.
我正在使用OpenCV 2.4.3来读写视频文件.我的代码是这样的:
cv::VideoCapture video;
video.open ( "D:\\testVideo.avi" );
cv::VideoWriter output;
output.open ( "D:\\outputVideo.avi", CV_FOURCC('D','I','V','X'), 120, cv::Size ( 1200,1600), true );
cv::Mat img;
for ( int n = 0; ; n ++ )
{
video >> img;
output.write ( img );
}
Run Code Online (Sandbox Code Playgroud)
然后结果视频是一个空文件,我无法打开它.我在这做错了什么?
我使用opencv 2.4.3使用以下代码执行向量到矩阵转换:
struct Component
{
cv::Rect box;
double area;
double circularity;
}
int main ( ... )
{
cv::vector < Component > components;
cv::Mat componentMat ( components, true );
std::cout << componentMat;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它发出错误,说:
OpenCV Error: Unsupported format or combination of formats() in unknown function, file ...\opencv\modules\core\src\out.cpp, line 111
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?有没有其他方法将此向量转换为矩阵形式?谢谢.
我是OpenCV的新手.我试图使用迭代器而不是"for"循环,这对我的情况来说太慢了.我试过这样的代码:
MatIterator_<uchar> it, end;
for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it)
{
//some codes here
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何转换for循环,如:
for ( int i = 0; i < 500; i ++ )
{
exampleMat.at<int>(i) = srcMat>.at<int>( i +2, i + 3 )
}
Run Code Online (Sandbox Code Playgroud)
进入迭代器模式?也就是说,如何以迭代器形式执行"i + 2,i + 3"?我只能通过"*it"获得相应的值,但我无法得到它的计数数字.提前谢谢了.
我正在尝试使用opencv EM算法进行颜色提取.我在opencv文档中使用以下代码:
cv::Mat capturedFrame ( height, width, CV_8UC3 );
int i, j;
int nsamples = 1000;
cv::Mat samples ( nsamples, 2, CV_32FC1 );
cv::Mat labels;
cv::Mat img = cv::Mat::zeros ( height, height, CV_8UC3 );
img = capturedFrame;
cv::Mat sample ( 1, 2, CV_32FC1 );
CvEM em_model;
CvEMParams params;
samples = samples.reshape ( 2, 0 );
for ( i = 0; i < N; i++ )
{
//from the training samples
cv::Mat samples_part = samples.rowRange ( i*nsamples/N, (i+1)*nsamples/N);
cv::Scalar mean (((i%N)+1)*img.rows/(N1+1),((i/N1)+1)*img.rows/(N1+1)); …Run Code Online (Sandbox Code Playgroud) 我试图用openCV读取视频帧,以cv :: Mat形式保存数据.然后我想使用另一个接受"int type matrix"的代码到这个视频帧.我知道"cvMat"和"int类型矩阵"不兼容.也许我不熟悉opencv,但是我可以在"cvMat"和"int mat"之间进行任何类型的转换,以便我可以将我的代码用于捕获的视频帧吗?我说"int mat",也许它不正确,但我的意思是:
cv::Mat videoFrame;
int inputData[600][400];
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
inputData = videoFrame;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在使用Matlab的SVM功能来分类从文件夹中读取的图像.我想要做的是首先从文件夹中读取20个图像,然后使用它们来训练SVM,然后给出新图像作为输入,以确定该输入图像是否属于这20个训练图像的相同类别.如果是,那么分类结果应该给我1,如果没有,那么我希望收到-1.
到目前为止,我的书面代码如下:
imagefiles = dir('*.jpg');
nfiles = 20;
for i = 1:nfiles
currentfilename = imagefiles(i).name;
currentimage = imread(currentfilename);
images{i} = currentimage;
images{i} = im2double(images{i});
images{i} = rgb2gray(images{i});
images{i} = imresize(images{i},[200 200]);
images{i} = reshape(images{i}', 1, size(images{i},1)*size(images{i},2));
end
trainData = zeros(nfiles, 40000);
for ii=1:nfiles
trainData(ii,:) = images{ii};
end
class = [1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1];
SVMStruct = svmtrain (trainData, class);
inputImg = …Run Code Online (Sandbox Code Playgroud)