【问题标题】:Opencv compare RectsOpencv比较矩形
【发布时间】: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?

【问题讨论】:

    标签: opencv rect mat


    【解决方案1】:

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

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

    2- 你可以在cropMat 中使用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 投资回报率那么简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2019-03-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多