微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用c比较两个图像

如何解决如何用c比较两个图像

我想实现一种能够使用 OpenCV 3.0.0 的 C api 比较两个图像的算法。 图像由网络摄像头捕获,因此它们具有相同的分辨率(不用担心很小)和相同的文件格式(jpeg)(但我们可以根据需要更改它) 我的想法是获得两个图像,在黑白中进行转换,并使用简单的构造比较一点一点。 在 b&w 中,我们可以将图像视为具有 0 和 1 的完整矩阵。 示例:

Image1(黑白)

  • 0 0 0 1
  • 0 1 0 1
  • 0 0 0 0
  • 0 0 1 1

所以我知道用 opencv 有很多方法可以做到,但我读了很多对我来说没用的例子。 所以我的想法是手动操作每个像素。将图像视为一个矩阵,我们可以使用简单的 double 结构(pixel_image[r:rows][c:columns] == pixel_image2[r:rows][c:columns] 仅当“像素”是被认为是整数。所以问题是我如何从 IplImage 类型访问像素的值?
当然这样我认为我的代码优化不好,或者我可能无法适应大规模的图像数据。

(请不要回答我:“使用 c++ - 使用 python - c 已被弃用 ecc ..”,我知道有很多方法可以使用高级代码以简单的方式做到这一点)

谢谢大家。

解决方法

好的,我解决了。 这样你就可以访问单个像素的值(如果图像加载为 RGB)(记住 opencv 见 BGR)

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
double tmpb,tmpg,bmpr;
for(int i=0;i<img->height;i++){
    for(int j=0;j<img->width;j++){
        tmpb=cvGet2D(img,i,j).val[0];
        tmpg=cvGet2D(img,j).val[1];
        tmpr=cvGet2D(img,j).val[2];
    }
}

如果图像是单通道(例如如果我们将其转换为黑白)是

IplImage* img=cvCreateImage(cvSize(640,3);
int tmp 
for(int i=0;i<img->height;i++){
    for(int j=0;j<img->width;j++){
        tmp=cvGet2D(img,j).val[0];
        printf("Value: %d",tmp);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。