Opencv比较矩形

Posted

技术标签:

【中文标题】Opencv比较矩形【英文标题】:Opencv compare Rects 【发布时间】:2013-11-28 22:16:40 【问题描述】:

我通过调用 DetectMultiScale 得到一个 Rect 向量:

face_cascade.detectMultiScale(ImgGray,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE);

但是比较需要垫子:

compare(OriginalImg,roi,dist,CMP_EQ);

如何将 Rect 转换为 Mat 进行比较,或者有没有办法比较 Rects?

【问题讨论】:

【参考方案1】:

0 - 它是compare,而不是detect。它执行per element comparison

1- 您不能将 Rect 转换为 Mat,因为一个定义了 4 点几何形状,而另一个定义了 3D 矩阵。

2- 你可以在crop 和Mat 中使用Rect,并在compare 中使用新的Mat

3- 人脸识别并不是那么简单。请查看this tutorial。

【讨论】:

人脸识别教程链接失效。【参考方案2】:

如果您想比较 2 个图像,您的 compare 函数将 2 个 cv::Mat 作为第一个输入。 要从ImgGray 中获取 roi,您必须从detectMultiScale 给出的 ROI 中提取一个新 Mat

Mat ImgGray;
vector<Rect> faces;
face_cascade.detectMultiScale(ImgGray,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE);
Rect roiRect = faces[0];
Mat roi = ImgGray (roiRect);
compare(OriginalImg,roi,dist,CMP_EQ);

OriginalImgdistroi 具有相同的大小和类型。 这能解决您的问题吗?

【讨论】:

转换成功但我得到以下错误:OpenCV 错误:输入参数的大小不匹配(操作既不是'array op array'(其中数组具有相同的大小和相同的类型) , 也不是 'array op scalar', 也不是 'scalar op array') 比较 比较方法的文档中:src1 : first input array or a scalar, when it is an array, it must have a single channel.来自ImgGray的roi是一个单通道矩阵,确保OriginalImg也只有一个通道组成。顺便说一句,C.Canberk Ba​​c 说得对,特征识别并不像“比较” 2 投资回报率那么简单。

以上是关于Opencv比较矩形的主要内容,如果未能解决你的问题,请参考以下文章

寻找最小矩形边框--OpenCv

OpenCV矩形检测

OpenCV - 计算两组4点矩形框的相交

我想要在opencv中用最小矩形外接图中图像并剪切截取出这个矩形部分。

OpenCV (C++) 中的向量比较

OpenCV 例程200篇211. 绘制垂直矩形