【发布时间】:2021-06-02 08:56:03
【问题描述】:
我想使用 OpenCV 3.0.0 的 C api 实现一种能够比较两个图像的算法。 图像由网络摄像头捕获,因此它们具有相同的分辨率(不要担心很小)和相同的文件格式(jpeg)(但我们可以根据需要更改它) 我的想法是获取两个图像,以黑白方式转换,并使用简单的 for 构造逐位比较。 在 b&w 中,我们可以将图像视为具有 0 和 1 的完整矩阵。 示例:
Image1(黑白)
- 0 0 0 1
- 0 1 0 1
- 0 0 0 0
- 0 0 1 1
所以我知道使用 opencv 有很多方法可以做到这一点,但我阅读了很多对我无用的示例。
所以我的想法是手动操作每个像素。将图像视为一个矩阵,我们可以通过一个简单的双精度构造(pixel_image[r:rows][c:columns] == pixel_image2[r:rows][c:columns] 仅当“像素”为被视为整数。所以问题是如何从 IplImage 类型中访问像素的值?
当然,这样我认为我的代码优化不好,或者我无法适应大规模的图像数据。
(请不要回答我:“使用 c++ - 使用 python - c 已弃用 ecc..”,我知道有很多方法可以通过高级代码轻松完成)
谢谢大家。
【问题讨论】:
-
逐像素比较不会给您任何满意的结果。想象一幅由一个像素宽度的垂直黑白条纹组成的图像。现在认为在其中一张图像上它向左移动了一个像素。没什么大不了的,对吧?但是你的算法会认为这两张图片有最大的不同。
-
是的,我知道,确实我会以百分比形式插入一种阈值错误(仅当我使用我的算法时)。所以问题是一样的,我如何从 IplImage 类型中访问像素值? @EugeneSh。
标签: c image opencv compare iplimage