标题说明了一切。
对于我的小图像识别项目,我正在执行我的queryDescriptors和vectorOfTrainingDescriptors之间的匹配。
因此,我想添加的内容是,首先要检查我的训练数据中是否已经使用了图像,或者是否存在相同的图像。
我当时认为这应该是一个简单的任务,并尝试了以下方法:
int findTheSameMat(const cv::Mat MatQ, const vector<cv::Mat> MatV) {
int result = -1;
for (int i = 0; i < MatV.size(); i++) {
if (cv::countNonZero(MatQ != MatV[i]) == 0) {
result = i;
break;
}
}
return result;
}
..但我收到以下错误消息:
OpenCV错误:比较中输入参数的大小不匹配(操作既不是“数组操作数组”(数组具有相同的大小和相同的类型),也不是“数组操作标量”或“标量操作数组”),文件/tmp/opencv-HEsb4m/opencv-2.4.9/modules/core/src/arithm.cpp,第2465行
libc++ abi.dylib:以cv::Exception类型的未捕获异常终止:/tmp/opencv-HEsb4m/opencv-2.4.9/modules/core/src/arithm.cpp:2465:错误:(-209)The函数比较中既不是'array op array'(数组具有相同大小和相同类型),也不是'array op scalar',也不是'scalar op array'
这很奇怪,因为MatQ && MatV [i]的类型应该相同。
它们被定义为
Mat MatQ;
vector MatV;
有任何想法吗?因为我是C++新手。
最佳答案
MatQ != MatV[i]
要求MatQ
和MatV[i]
具有相同的大小,即相同的宽度和高度。
要使其正常工作,您可以首先检查它们的大小是否相同。如果它们的大小相同,则只需进行下一步检查。喜欢
if (MatQ.size() == MatV[i].size()) {
if (cv::countNonZero(MatQ != MatV[i]) == 0) {
result = i;
break;
}
}
关于c++ - 如何在vector <cv::Mat>中找到相同的cv::Mat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33642043/