Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv检测在不同时间拍摄的两张照片之间的变化_Opencv_Image Processing_Opencv3.0_Opencv3.1 - Fatal编程技术网

Opencv检测在不同时间拍摄的两张照片之间的变化

Opencv检测在不同时间拍摄的两张照片之间的变化,opencv,image-processing,opencv3.0,opencv3.1,Opencv,Image Processing,Opencv3.0,Opencv3.1,我们有一张该商品的原始图像/照片。(即雕塑) 我们不时为该物品拍摄新照片。照片始终与物品成90度角拍摄。但是 会有一些轻微的上下/左右移动 同一物体的长度不同(我们是用直线拍摄的 相机和在它前面移动的物体,所以时间到时间的速度 对象正在更改,因此最终图像将比原始图像长 (原件) 照明也会改变,所以颜色和闪电也不总是一样的。 不时会有泥巴,不同的小物件在物品上 我很乐意听取您的建议和解决方案,以便使用opencv在新图片上检测和标记对象的不同部分 我们尝试了相似的EJ,但它显示由于颜色、长度等

我们有一张该商品的原始图像/照片。(即雕塑)

我们不时为该物品拍摄新照片。照片始终与物品成90度角拍摄。但是

  • 会有一些轻微的上下/左右移动 同一物体的长度不同(我们是用直线拍摄的 相机和在它前面移动的物体,所以时间到时间的速度 对象正在更改,因此最终图像将比原始图像长 (原件)
照明也会改变,所以颜色和闪电也不总是一样的。 不时会有泥巴,不同的小物件在物品上

我很乐意听取您的建议和解决方案,以便使用opencv在新图片上检测和标记对象的不同部分

我们尝试了相似的EJ,但它显示由于颜色、长度等差异,所有零件都发生了变化。但目标是一样的

Thx

代码:

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


要测试图像

我想到了两种方法

  • 计算帧之间的差异。OpenCV提供了这样的功能。从那里得到的差分矩阵,然后它们

  • 教程用于图像差异

  • 您还可以研究如何实现这一点。计算两帧的标准偏差,检查是否通过某个阈值


  • 你能在你的帖子中添加图片样本吗?谢谢你的帮助。相机固定动画相机。所以同一个物体由于物体的速度不同而有不同的长度,不同的方向对于x,y轴和z深度都很小。您建议的是,除此之外,您提到的教程显示了同一对象中的所有更改。很多感谢老师,但我不太明白你所说的相机修正动画相机是什么意思。这是一个安卓单词修正错误。很抱歉我是说线扫描相机。☺哦,好的。。为了澄清我理解了你的评论,你是说同一个物体可以有不同的长度?我了解方向,但同一个对象从一个视频帧到另一个视频帧的长度如何不同?2:你试过我建议的方法吗?它们也包括方向。就我个人而言,我使用了absdiff,甚至还找到了追踪物体的轮廓。诚然,它们是非常基本的方法,但当物体的速度与我们稍微改变的长度不同时,它们也适用于方向。我怎样才能私下发给你一些样品图片?给你一个更好的主意。