【发布时间】:2017-06-30 09:42:59
【问题描述】:
我们有该商品的一张原始图片/照片。 (即雕塑)。
我们会不时为商品拍摄新照片。照片始终与物品成 90 度角拍摄。但是
- 会有一些轻微的上下/左右移动 是同一物体的不同长度(我们用线取 相机和在它前面移动的物体时不时的速度 对象发生变化,因此最终图像将比 原创)
照明也会发生变化,因此颜色和闪电也不总是相同。 物品上不时会有泥巴、不同的小物件。
我很乐意听取您的建议和解决方案,以使用 opencv 在新图片上检测和标记对象的不同部分。
我们尝试了likejs,但它显示所有部分都因颜色、长度等差异而发生变化。但是对象是一样的
谢谢
代码:
from skimage.measure import compare_ssim
import argparse
import imutils
import cv2
import numpy as np
ap = argparse.ArgumentParser()
ap.add_argument("-f", "--first", required=True,
help="first input image")
ap.add_argument("-s", "--second", required=True,
help="second")
args = vars(ap.parse_args())
imageA = cv2.imread(args["first"])
imageB = cv2.imread(args["second"])
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
(score, diff) = compare_ssim(grayA, grayB, full=True)
diff = (diff * 55).astype("uint8")
print("SSIM: {}".format(score))
thresh = cv2.threshold(diff, 0, 255,
cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
for c in cnts:
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow("Diff", diff)
cv2.waitKey(0)
编辑 1
Link 测试图片
【问题讨论】:
-
您可以在帖子中添加示例图片吗?
标签: opencv image-processing opencv3.0 opencv3.1