【问题标题】:opencv threshold problem for finding diff images用于查找差异图像的opencv阈值问题
【发布时间】:2021-08-07 22:46:42
【问题描述】:

我有 2 张如下图。我想有两个不同。

我尝试了一些带有阈值的代码。但没有门槛不同。两幅图像阈值图像全黑。我怎样才能使脱粒时的颜色与白色有所不同?

(区别就在左上角,像个小黑点)

before = cv2.imread('1.png')
after = cv2.imread('2.png')

threshb = cv2.threshold(before, 0, 255, cv2.THRESH_BINARY_INV)[1]
thresha = cv2.threshold(after, 0, 255, cv2.THRESH_BINARY_INV)[1]

cv.imshow("before",threshb)
cv.imshow("after",thresha)

不是:我使用“structural_similarity”link here 来寻找差异,但它发现了很多差异:(

我不需要小的像素差异。我需要人眼所见的差异。

【问题讨论】:

  • 使用 cv2.absdiff()。见docs.opencv.org/4.1.1/d2/de8/…
  • 它没有用。
  • 显示您的估计中的“无效”。我建议使用 opencv 的背景减法模块,但这需要视频。 absdiff() 肯定可以解决这个问题。
  • 当我对第一张和第二张图片使用 absdiff 时,结果都是黑色

标签: python image opencv difference threshold


【解决方案1】:

处理这个问题的方法是先做 absdiff,然后在 Python/OpenCV 中有所收获。当您对这些图像进行 absdiff 时,差异很小,因此不会超过黑色。所以你必须增加增益才能看到差异。 (或者你可以设置一个合适的阈值)

输入 1:

输入 2:

import cv2
import numpy as np
from skimage import exposure as exposure

# read image 1
img1 = cv2.imread('gray1.png', cv2.IMREAD_GRAYSCALE)

# read image 2
img2 = cv2.imread('gray2.png', cv2.IMREAD_GRAYSCALE)

# do absdiff
diff = cv2.absdiff(img1,img2)

# apply gain
result1 = cv2.multiply(diff, 5)

# or do threshold
result2 = cv2.threshold(diff, 10, 255, cv2.THRESH_BINARY)[1]

# save result
cv2.imwrite('gray1_gray2_diff1.png', result1)
cv2.imwrite('gray1_gray2_diff2.png', result2)

# display result
cv2.imshow('diff', diff)
cv2.imshow('result1', result1)
cv2.imshow('result2', result2)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果 1(增益):

结果 2(阈值):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多