使用 openCV 从一幅图像中减去另一幅图像
如何使用 openCV 从一幅图像中减去另一幅图像?
Ps.:我无法使用 python 实现,因为我必须用 C++ 来实现
How can I subtract one image from another using openCV?
Ps.: I coudn't use the python implementation because I'll have to do it in C++
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
更改图像名称。还要确保它们的尺寸相同。
Change the image names. Also make sure they have the same size.
我宁愿建议使用 OpenCV 方法
cv::absdiff
,而不是使用diff
或只是简单的减法im1-im2
因为图像通常使用无符号存储格式,@Dat 和 @ssh99 的减法方法将消除所有负差异。例如,如果 BMP 图像的某些像素对于
im1
和[70, 80, 90]
的值为[20, 50, 30]
对于im2
,同时使用im1 - im2
和diff(im1, im2, diff)
将产生值[0,0,0 ]
,因为20-70 = -50
、50-80 = -30
、30-90 = -60
以及所有负结果将转换为无符号值0
,在大多数情况下,这不是您想要的。方法absdiff
将计算所有减法的绝对值,从而产生更合理的[50,30,60]
。Instead of using
diff
or just plain subtractionim1-im2
I would rather suggest the OpenCV methodcv::absdiff
Since images are usually stored using unsigned formats, the subtraction methods of @Dat and @ssh99 will kill all the negative differences. For example, if some pixel of a BMP image has value
[20, 50, 30]
forim1
and[70, 80, 90]
forim2
, using bothim1 - im2
anddiff(im1, im2, diff)
will produce value[0,0,0]
, since20-70 = -50
,50-80 = -30
,30-90 = -60
and all negative results will be converted to unsigned value of0
, which, in most cases, is not what you want. Methodabsdiff
will instead calculate the absolute values of all subtractions, thus producing more reasonable[50,30,60]
.使用 cv::subtract() 方法。
这将执行 (img1-img2) 的元素减法。
您可以找到有关它的更多详细信息 http://docs.opencv.org/modules/核心/doc/operations_on_arrays.html
use cv::subtract() method.
This performs elementwise subtract of (img1-img2).
you can find more details about it http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
使用
LoadImage
将图像加载到内存中,然后使用 子方法。此链接包含一些示例代码,如果有帮助的话:http://permalink。 gmane.org/gmane.comp.lib.opencv/36167
Use
LoadImage
to load your images into memory, then use the Sub method.This link contains some example code, if that will help: http://permalink.gmane.org/gmane.comp.lib.opencv/36167