gpt4 book ai didi

c++ - 图像处理-大纲

转载 作者:行者123 更新时间:2023-11-28 08:01:02 29 4
gpt4 key购买 nike

下面给出了我用来找出两张图片之间差异的代码。

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include<iostream>

int main()
{
char a,b;
cv::Mat frame;
cv::Mat frame2;
VideoCapture cap(0);
if(!cap.isOpened())
{
cout<<"Camera is not connected"<<endl;
getchar();
exit(0);

}
Mat edges;
namedWindow("Camera Feed",1);
cout<<"Ready for background?(y/Y)"<<endl;
cin>>a;
if(a=='y'||a=='Y')
{
cap>>frame;
cv::cvtColor(frame,frame,CV_RGB2GRAY);
cv::GaussianBlur(frame,frame,cv::Size(51,51),2.00,0,BORDER_DEFAULT);
}
cv::waitKey(5000);
cout<<"Ready for foreground?(y/Y)"<<endl;
cin>>b;
if(b=='y'||b=='Y')
{
cap>>frame2;
cv::cvtColor(frame2,frame2,CV_RGB2GRAY);
cv::GaussianBlur(frame2,frame2,cv::Size(51,51),2.00,0,BORDER_DEFAULT);
}
cv::Mat frame3;
cv::absdiff(frame,frame2,frame3);


imwrite("img_bw.jpg",frame3);

return 0;
}

输出类似于this .我想知道是否有任何方法可以在 body 周围画出轮廓之类的东西。谢谢。

最佳答案

我刚刚尝试了以下方法。

首先对灰度图像进行膨胀,然后对图像应用自适应阈值处理。

后来在图像中找到轮廓,并假设您的 body 将是图像中最大的 Blob ,为最大的 Blob 绘制轮廓。

import cv2
import numpy as np

img = cv2.imread('sofqn.jpg')
gray = cv2.imread('sofqn.jpg',0)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(10,10))
gray = cv2.dilate(gray,kernel)

thresh = cv2.adaptiveThreshold(gray,255,0,1,11,2)

cont,hier = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
max_area = -1
best_cnt = None
for cnt in cont:
area = cv2.contourArea(cnt)
if area > max_area:
max_area = area
best_cnt = cnt

cv2.drawContours(img,[best_cnt],0,[0,255,0],2)

结果如下:

enter image description here

关于c++ - 图像处理-大纲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11464509/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com