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);
OriginalImg
、dist
和 roi
具有相同的大小和类型。
这能解决您的问题吗?
【讨论】:
转换成功但我得到以下错误: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 Bac 说得对,特征识别并不像“比较” 2 投资回报率那么简单。以上是关于Opencv比较矩形的主要内容,如果未能解决你的问题,请参考以下文章