【问题标题】:Opencv detect changes between two photos taken by different timeOpencv检测两张不同时间拍摄的照片之间的变化
【发布时间】: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


【解决方案1】:

我想到了几种方法。

  1. 计算帧之间的差异。 OpenCV 提供了absdiff 来做这件事。从那里findContours 得到的差分矩阵然后draw 他们。

  2. This 教程使用scikit-image 处理图像差异

  3. 您也可以查看meanStdDev 来完成此操作。计算两帧的标准差,看看是否超过了某个阈值。

【讨论】:

  • 感谢您的帮助。相机固定动漫相机。因此,由于物体的速度和 x y 轴的不同方向以及 z 深度,同一物体具有不同的长度。您所建议的内容比您提到的教程显示的所有内容都在同一个对象中发生了变化。非常感谢
  • 对不起,我不太明白你说的相机固定动漫相机是什么意思
  • 这是一个安卓单词更正错误。对不起。我的意思是线扫描相机。 ☺
  • 哦好吧..所以只是为了澄清我理解你的评论,你是说同一个对象可以有不同的长度?我了解方向,但同一个对象如何从一个视频帧到另一个视频帧具有不同的长度? 2:您尝试过我建议的任何方法吗?它们也涵盖方向。就个人而言,我使用 absdiff 甚至找到 Contours 来跟踪对象。当然,它们是非常基本的方法,但它们也适用于方向
  • 当物体的速度与我们的长度不同时。我怎样才能私下向您发送一些示例图像?为了给你更好的主意。
猜你喜欢
  • 1970-01-01
  • 2017-05-17
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多