以前,我使用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((,