使用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 ///初始化(C API) 向量存储; 存储回推(…); if(storeImg.at(i)=storeImg.at(0))//无错误 ///初始化(C++API) 向量存储; 存储回推(…); ///使用它 if(storeImg.at(i)=storeImg.at(0))//错误:条件表达式非法

使用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 ///初始化(C API) 向量存储; 存储回推(…); if(storeImg.at(i)=storeImg.at(0))//无错误 ///初始化(C++API) 向量存储; 存储回推(…); ///使用它 if(storeImg.at(i)=storeImg.at(0))//错误:条件表达式非法,opencv,Opencv,还有其他解决方法吗?您需要像这样访问storeImg的索引 storeImg[i] 如果希望访问存储在索引中的Mat元素,可以调用 storeImg[i].at<float>(j) storeImg[i].at(j) 我对此不确定,但只是测试了一下,顺便说一下,它可以正常工作并得到验证 if(storeImg[i].data == storeImg[0].data) 请澄清,您打算进行什么样的比较 如果您得到一个向量storeImg,(storeImg[0]==storeImg

还有其他解决方法吗?

您需要像这样访问storeImg的索引

storeImg[i]
如果希望访问存储在索引中的Mat元素,可以调用

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

我对此不确定,但只是测试了一下,顺便说一下,它可以正常工作并得到验证

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

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

如果您得到一个
向量storeImg
(storeImg[0]==storeImg[7])
将只比较指针

对于
向量存储img
而言,相同的表达式将尝试比较整个结构,这实际上是非法的

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

这将是这样的:
sum(storeImg[0]-storeImg[7])==0


如果仍要比较指针,
(storeImg[0]。data==storeImg[7]。data)
可能在cv:Mat的情况下工作,但如果在那里得到其他Mat的clone(),它将失败,如果(storeImg[i]==storeImg[0])仍然产生错误。您知道为什么会发生这种情况吗?如果这样做:If(storeImg[i].data==storeImg[0].data),那么您只是将指针与数据进行比较。如果要确保整个矩阵相同,请检查此处:我要确保如果storeImg[I]与storeImg[0]相同,则执行其他操作。