错误:' -> '的基本操作数具有非指针类型' cv::Mat '

error: base operand of ‘->’ has non-pointer type ‘cv::Mat’

本文关键字:指针 Mat cv 类型 错误 操作数      更新时间:2023-10-16

我有一个c- api opencv项目,我想改成c++ (mat)查看原始代码:

current_cost = 0;
basePtr = (unsigned char*)tmp1->imageData;
for( int j=0; j<tmp1->height; basePtr += tmp1->widthStep, j++ )
{
    iterator = basePtr;
    for( int i=0; i<tmp1->width; iterator++, i++ )
        if( *iterator == 255 )
            current_cost++;
}
basePtr = (unsigned char*)tmp2->imageData;
for( int j=0; j < tmp2->height; basePtr += tmp2->widthStep, j++ )
{
    iterator = basePtr;
    for( int i=0; i<tmp2->width; iterator++, i++ )
        if( *iterator == 0 )
            current_cost++;
}
if( current_cost < cost )                
    return true;
else return false;

运行此项目后,查看此错误

main.cpp:63:35: error: base operand of ‘->’ has non-pointer type ‘cv::Mat’
 basePtr = (unsigned char*)tmp1->imageData; 

看到使用'->'的每一行的错误。请帮帮我……

您不应该仅仅转换每一行代码,而应该巧妙地使用c++ api。您的函数可以简单地重写为:

bool foo(const Mat& tmp1, const Mat& tmp2, int cost) {
    int count = countNonZero(tmp1 == 255);
    count += countNonZero(tmp2 == 0);
    return count < cost;
}