小编E_l*_*ner的帖子

"++"和"+ = 1"运算符之间有什么区别?

在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,但如何?这种差异是否足以被忽视?

c++ integer loops increment auto-increment

45
推荐指数
4
解决办法
4万
查看次数

表达式必须是可修改的左值

我有以下代码:

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)

没关系.有人可以向我解释一下吗?

c++ if-statement

26
推荐指数
3
解决办法
20万
查看次数

如何在Matlab中显示RGB图像的直方图?

我用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.我知道第三个维度是用于颜色通道,但有没有办法显示这个直方图?谢谢.

matlab image histogram

17
推荐指数
3
解决办法
7万
查看次数

OpenCV:将3通道图像转换为4通道

我正在尝试将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'系列.此外,我不确定我是否正确地为我的目标提供论据.有人能帮我吗?谢谢.

c++ opencv image-processing

13
推荐指数
3
解决办法
2万
查看次数

如何在OpenCV 2.4.3中编写视频文件

我正在使用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)

然后结果视频是一个空文件,我无法打开它.我在这做错了什么?

c++ video opencv image-processing

13
推荐指数
2
解决办法
4万
查看次数

在OpenCV中将矢量转换为mat

我使用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)

我在这做错了什么?有没有其他方法将此向量转换为矩阵形式?谢谢.

c++ opencv vector matrix type-conversion

10
推荐指数
1
解决办法
2万
查看次数

OpenCV:矩阵迭代

我是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"获得相应的值,但我无法得到它的计数数字.提前谢谢了.

iteration opencv iterator matrix

8
推荐指数
1
解决办法
2万
查看次数

OpenCV:基于高斯混合模型的颜色提取

我正在尝试使用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)

c++ opencv extract colors gaussian

7
推荐指数
1
解决办法
2万
查看次数

OpenCV矩阵和int矩阵之间的转换

我试图用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)

谢谢.

c++ video opencv matrix type-conversion

6
推荐指数
1
解决办法
4715
查看次数

用于图像分类的Matlab SVM

我正在使用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)

matlab image classification image-processing svm

6
推荐指数
1
解决办法
2万
查看次数