如何在向量中找到相同的cv::Mat<简历::Mat>
How to find the same cv::Mat in vector<cv::Mat>
标题说明了一切。。
对于我的小图像识别项目,我正在对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错误:在比较中,输入参数的大小不匹配(操作既不是"array-op-array"(其中数组具有相同的大小和类型),也不是"array op scalar"或"scalar op array"),文件/tmp/OpenCV-HEsb4m/OpenCV-2.4.9/modules/core/src/athmethy.cpp,第2465行libc++abi.dylib:终止于cv::exception:/tmp/opencv-HEsb4m/opencv-2.4.9/modules/core/src/arrithms.cpp:2465:error:(-209)函数compare 中的操作既不是"array-op-array"(其中数组具有相同大小和类型),也不是"array op scalar"或"scalar op array"
这很奇怪,因为MatQ&;MatV[i]应该是相同的。。它们被定义为
Mat-MatQ
向量<垫子>MatV;
有什么想法吗?因为我是一个C++迷。
MatQ != MatV[i]
要求MatQ
和MatV[i]
具有相同的大小,即相同的宽度和高度。
要使其工作,您可以首先检查它们的大小是否相同。如果它们的尺寸相同,您只需要进行下一次检查。像
if (MatQ.size() == MatV[i].size()) {
if (cv::countNonZero(MatQ != MatV[i]) == 0) {
result = i;
break;
}
}
相关文章:
- 将CHW格式的浮点向量转换为cv::Mat
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::mat 转换为 QImage
- 将 cv::Mat 转换为 std::vector 的通用函数
- 在 QML VideoOutput 中将 cv::mat 显示为 QVideoFrame
- 如何将 cv::Mat & Img 复制到未签名的 char* img?opencv
- 如何将 cv::Mat 转换为 vtkImageData?
- 如何将 vtkImageData 转换为 cv::Mat?
- 如何总结所有cv::Mat元素
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 在 cv::Mat 中生成 2D 坐标网格
- 将 cv::Mat 转换为无符号的 int 像素
- OpenCV 分段错误(核心转储)在使用 cv::Mat::at 时
- 如何将多个 cv::Mat 从 c++ dll 传递到 opencvsharp Mat c#?
- OpenCV(3.4.1) 错误:断言失败(变暗 <= 2 && step[0] > 0) in cv::Mat::locateROI
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 如何使用 (*mpORBextractorLeft)(im,cv::Mat(),mvKeys,mDescriptors)
- 从数组创建 Mat 时,'cv::Mat' 和 'int' 类型不兼容
- 如何将 cv::mat 对象从 python 模块传递到 c++ 函数并返回返回的 cv::mat 类型为对象?