使用Mat类型的条件表达式



以前,我使用C API,现在我正在迁移到C++API opencv。以下是一些没有经历的事情。它指出了Mat中条件表达式的某种错误。使用C API似乎一切都很好。

/// Initialize (C API)
vector<IplImage*> storeImg;
storeImg.pushback(...);
if( storeImg.at(i) == storeImg.at(0) )//no error
/// Initialize (C++ API)
vector<Mat> storeImg;
storeImg.pushback(...);
/// To use it
if( storeImg.at(i) == storeImg.at(0) )//error: conditional expression is illegal

有其他解决方法吗?

您需要访问类似的storeImg的索引

storeImg[i]

如果你想访问存储在索引中的Mat元素,你可以调用

storeImg[i].at<float>(j)

我对此不确定,但只是测试了一下,顺便验证一下它的工作原理。

if(storeImg[i].data == storeImg[0].data)

请澄清,您打算进行什么样的比较。

如果您得到一个vector<IplImage*> storeImg( storeImg[0]==storeImg[7] )将只比较POINTERS。

对于vector<Mat> storeImg,相同的表达式会尝试比较整个结构,这实际上是非法的。

是否要检查内容(像素(是否相等?

类似于:sum( storeImg[0] - storeImg[7] ) == 0

如果你仍然想比较指针,( storeImg[0].data == storeImg[7].data )可能在cv:Mat的情况下工作,但它会失败,如果你在那里得到了其他Mat的clone((,

相关内容

  • 没有找到相关文章

最新更新