循环使用cvtColor

use cvtColor in a loop

本文关键字:cvtColor 循环      更新时间:2023-10-16

我正试图在循环中运行cvtColor命令。

    vector<Mat> RImages;
    vector<Mat> hImages;      
    for ( int idx = 0; idx < blocks_width * blocks_height; idx++ )
    {
        ...
        Mat temp;
        RImages.push_back( imread( filename , 1 ) );
        hImages.push_back( cvtColor( RImages[ idx ], temp , CV_BGR2HSV ));
    }

我收到错误:

无效使用void表达式在ctColor中。

cvtColor( RImages[ idx ], temp , CV_BGR2HSV )

此函数不返回任何内容。cvtColor的结果存储在temp中。您的代码应该是这样的:

vector<Mat> RImages;
vector<Mat> hImages;      
for ( int idx = 0; idx < blocks_width * blocks_height; idx++ )
{
    ...
    Mat temp;
    RImages.push_back( imread( filename , 1 ) );
    cvtColor( RImages[ idx ], temp , CV_BGR2HSV );
    hImages.push_back(temp  );
}

顺便说一句,你可以像这样优化你的代码:

vector<Mat> RImages;
vector<Mat> hImages;
RImages.reserve(blocks_width * blocks_height); 
hImages.reserve(blocks_width * blocks_height); 
for ( int idx = 0; idx < blocks_width * blocks_height; idx++ )
{
    ...
    Mat temp;
    RImages.emplace_back(imread( filename , 1 ) );
    cvtColor( RImages[ idx ], temp , CV_BGR2HSV );
    hImages.emplace_back(temp  );
}