相关疑难解决方法(0)

CV - 提取两个图像之间的差异

我目前正在研究基于视频监控的入侵系统.为了完成这个任务,我拍摄了我的场景背景的快照(假设它完全干净,没有人或移动物体).然后,我比较从(静态)摄像机获得的帧并寻找差异.我必须能够检查任何差异,不仅是人的形状或其他什么,所以我不能具体提取特征.

通常,我有:

http://postimg.org/image/dxtcp4u8h/

我正在使用OpenCV,所以要比较我基本上做的:

cv::Mat bg_frame;
cv::Mat cam_frame;
cv::Mat motion;

cv::absdiff(bg_frame, cam_frame, motion);
cv::threshold(motion, motion, 80, 255, cv::THRESH_BINARY);
cv::erode(motion, motion, cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3)));
Run Code Online (Sandbox Code Playgroud)

结果如下:

http://postimg.org/image/3kz0o62id/

正如你所看到的那样,手臂被剥离了(由于我猜的颜色差异冲突),这很遗憾不是我想要的.

我想添加使用cv::Canny()以检测边缘并填充手臂的缺失部分,但遗憾的是(再一次),它只解决了少数情况下的问题,而不是大多数情况.

我可以使用任何算法或技术来获得准确的差异报告吗?

PS:对不起图片.由于我的新订阅,我没有足够的声誉.

编辑 我在这里使用灰度图像,但我对任何解决方案都持开放态度.

opencv motion-detection difference

30
推荐指数
3
解决办法
6万
查看次数

如何使用SURF功能(Python OpenCV)匹配和对齐两个图像?

我正在使用以下代码来匹配两个图像的冲浪特征,但无法裁剪和对齐图像。

原始图像-旋转图像和匹配图像如下。

原版的 旋转的 匹配

我想像原始图像一样将旋转后的图像拉直,并裁剪出直线对齐的图像。我尝试了几何变换,但无法对齐图像。

import numpy
import cv2

############### Image Matching ###############


def match_images(img1, img2):
    """Given two images, returns the matches"""
    detector = cv2.SURF(400, 5, 5)
    matcher = cv2.BFMatcher(cv2.NORM_L2)

    kp1, desc1 = detector.detectAndCompute(img1, None)
    kp2, desc2 = detector.detectAndCompute(img2, None)

    raw_matches = matcher.knnMatch(desc1, trainDescriptors = desc2, k = 2) 
    kp_pairs = filter_matches(kp1, kp2, raw_matches)
    return kp_pairs

def filter_matches(kp1, kp2, matches, ratio = 0.75):
    mkp1, mkp2 = [], []
    for m in matches:
        if len(m) == 2 and m[0].distance < m[1].distance * ratio: …
Run Code Online (Sandbox Code Playgroud)

python opencv image surf

4
推荐指数
1
解决办法
2692
查看次数

标签 统计

opencv ×2

difference ×1

image ×1

motion-detection ×1

python ×1

surf ×1