https://mydreamambitious.blog.csdn.net/article/details/125339604
https://mydreamambitious.blog.csdn.net/article/details/125340595
https://mydreamambitious.blog.csdn.net/article/details/125249121
https://www.cnblogs.com/skyfsm/p/6894685.html
https://mydreamambitious.blog.csdn.net/article/details/125428402
https://mydreamambitious.blog.csdn.net/article/details/125340081
#对图片进行翻转,Opencv读取的图片和我们正常的显示方式相反
img=cv2.flip(src=frame,flipCode=2)
img=cv2.resize(src=img,dsize=(600,600))
#去除背景
bgsegment=cv2.createBackgroundSubtractorMOG2()
#转换为灰度图
img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)
img = bgsegment.apply(img)
#对图像进行高斯噪声处理
gauss=cv2.GaussianBlur(src=img,ksize=(3,3),sigmaX=0)
#图像二值化
ok, dst = cv2.threshold(src=gauss, thresh=70, maxval=255, type=cv2.THRESH_BINARY)
# 首先获取卷积核
kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(3, 3))
#对图像进行腐蚀
erode=cv2.erode(src=dst,kernel=kernel,iterations=1)
# canny=cv2.Canny(image=erode,threshold1=50,threshold2=100)
#对图像进行膨胀
dilate=cv2.dilate(src=erode,kernel=kernel,iterations=1)
#查找轮廓
contours,hierarchy=cv2.findContours(image=dilate,mode=cv2.RETR_TREE,
method=cv2.CHAIN_APPROX_SIMPLE)
#找到其中最大的轮廓
index=0
maxArea=0
length=len(contours)
if length>0:
for i in range(length):
#计算轮廓的面积
area=cv2.contourArea(contours[i])
if area>maxArea:
maxArea=area
index=i
# print('len(contours)= {} ; index={}'.format(len(contours),index))
#首先绘制图像的形状
image=np.zeros(shape=frame.shape,dtype=np.uint8)
res=contours[index]
cv2.drawContours(image=image,contours=[res],
contourIdx=0,color=(0,255,0),thickness=2)
#绘制凸包
hull=cv2.convexHull(points=res)
cv2.drawContours(image=image,contours=[hull],contourIdx=0,
color=(0,0,255),thickness=3)
import os
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
#去除背景
bgsegment=cv2.createBackgroundSubtractorMOG2()
while cap.isOpened():
OK,frame=cap.read()
if OK==False:
break
#对图片进行翻转,Opencv读取的图片和我们正常的显示方式相反
img=cv2.flip(src=frame,flipCode=2)
img=cv2.resize(src=img,dsize=(600,600))
#转换为灰度图
img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)
img = bgsegment.apply(img)
#对图像进行高斯噪声处理
gauss=cv2.GaussianBlur(src=img,ksize=(3,3),sigmaX=0)
#图像二值化
ok, dst = cv2.threshold(src=gauss, thresh=70, maxval=255, type=cv2.THRESH_BINARY)
# 首先获取卷积核
kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(3, 3))
#对图像进行腐蚀
erode=cv2.erode(src=dst,kernel=kernel,iterations=1)
# canny=cv2.Canny(image=erode,threshold1=50,threshold2=100)
#对图像进行膨胀
dilate=cv2.dilate(src=erode,kernel=kernel,iterations=1)
#查找轮廓
contours,hierarchy=cv2.findContours(image=dilate,mode=cv2.RETR_TREE,
method=cv2.CHAIN_APPROX_SIMPLE)
#找到其中最大的轮廓
index=0
maxArea=0
length=len(contours)
if length>0:
for i in range(length):
#计算轮廓的面积
area=cv2.contourArea(contours[i])
if area>maxArea:
maxArea=area
index=i
# print('len(contours)= {} ; index={}'.format(len(contours),index))
#首先绘制图像的形状
image=np.zeros(shape=frame.shape,dtype=np.uint8)
res=contours[index]
cv2.drawContours(image=image,contours=[res],
contourIdx=0,color=(0,255,0),thickness=2)
#绘制凸包
hull=cv2.convexHull(points=res)
cv2.drawContours(image=image,contours=[hull],contourIdx=0,
color=(0,0,255),thickness=3)
cv2.imshow('image',image)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')