中文文字翻译:太绝了
史上最全的OpenCV入门教程_qq_38660394的博客-CSDN博客blog.csdn.net第一节:Intro and loading Images
功能:读取图片,显示图片,导入matplotlib.pyplot,保存图像
#Intro and loading Images
输出结果:
第二节:Loading videoo Source
功能:打开摄像机,转为灰度图,在窗口中显示,保存为avi格式视频
#Loading videoo Source
输出结果:
参考链接:
Opencv-VideoWriter_Yan-CSDN博客_cv2.videowriter_fourcc(*xvid)blog.csdn.net第三节:Drawing and Writing on Image
功能:读取图片,画矩形/圆形/多边形/写字,显示图片
#Drawing and Writing on Imag
输出结果:
参考链接:
python-opencv绘图函数(cv2.line(), cv2.circle(), cv2.rectangle(),cv2.ellipse() cv2. cv2.putText() )blog.csdn.netreshape
numpy.reshape - NumPy v1.19 Manualnumpy.org第四节:Image Operations
功能:图片矩阵块的理解,复制
#Image Operations
输出结果:
第五节:Image arithmetics and Logic
功能:三种图像叠加的形式
#Image arithmetics and Logic
输出结果:
参考链接:
opencv中addWeighted()函数用法总结(05)_久久乐-CSDN博客_addweightedblog.csdn.net功能:二值化、掩膜
#Image arithmetics and Logic
#功能:二值化、掩膜
import cv2
import numpy as np
img1 = cv2.imread('3D-Matplotlib.png')#读取图片,引号内为图片路径
img2 = cv2.imread('mainlogo.png')
rows,cols,channels = img2.shape#将图(长、宽、位深)复制到变量中
roi = img1[0:rows,0:cols]#将img2中信息复制到img1指定位置
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)#将图片转为灰度图
ret,mask = cv2.threshold(img2gray, 220, 255, cv2.THRESH_BINARY_INV)#将图像进行二值化
#注意:如果采用彩色图像进行计算会得到彩色效果,而不是预期的二值化结果
mask_inv = cv2.bitwise_not(mask)#对图像进行非运算
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)#对图像进行与运算
img2_fg = cv2.bitwise_and(img2, img2, mask=mask)
dst = cv2.add(img1_bg, img2_fg)#将图像灰度进行相加
img1[0:rows,0:cols] = dst#将img1中选定区域复制给dst
#cv2.imshow('res',img1)#将img2复制到img1指定位置
#cv2.imshow('mask_inv',mask_inv)#将img2二值化后的图像进行非运算
cv2.imshow('img1_bg',img1_bg)#将img1中指定roi区域与img2进行与运算
#cv2.imshow('img2_fg',img2_fg)#将img2本身进行与运算,注意模式
cv2.imshow('dst',dst)#显示img1中指定roi区域图像
#cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:
参考链接:
【python】opencv库中cv2.threshold()函数的参数与返回值www.jianshu.com第六节:Thresholding(阈值)
功能:几种常用二值化结果对比及使用方法
#Thresholding
输出结果:
参考链接:
opencv阈值处理--threshold函数、自适应阈值处理、Otsu处理(大津法) - pheasant - 博客园www.cnblogs.com第七节:Color Filtering(颜色滤波器)
功能:基于摄像头的掩膜、HSV提取
图像
输出结果:
参考链接:
(1)利用掩膜(mask)进行“与”操作,即掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除,其余按位操作原理类似只是效果不同而已。
inRange()函数、cvtColor()函数、createTrackbar()函数_qq_37791134的博客-CSDN博客_inrangeblog.csdn.net(2)k = cv2.waitKey(5) & 0xFF解释
品颜完月:OpenCV&Python 编程中对此语句的理解:if cv2.waitKey(25) & 0xFF == 27zhuanlan.zhihu.com第八节:Blurring and Smoothing(模糊和平滑)
功能:几种滤波效果的介绍
# Blurring and Smoothing
#功能:几种滤波效果的介绍
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
# 颜色空间转换
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#HSV:色度(H)、饱和度(S)、亮度(V)
# hsv( hue sat value )
lower_red = np.array([0,100,100])
upper_red = np.array([50,200,200])
# get mask
mask = cv2.inRange(hsv, lower_red, upper_red)
# detect red
res = cv2.bitwise_and(frame, frame, mask = mask)
kernel = np.ones((15,15), np.float32)/225
smoothed = cv2.filter2D(res, -1, kernel)#2D滤波器
blur = cv2.GaussianBlur(res, (15,15), 0)#高斯模糊滤波
median = cv2.medianBlur(res,15)#中值滤波器
bilateral = cv2.bilateralFilter(res, 15, 75, 75)#双边滤波
cv2.imshow('frame',frame)#显示原图
#cv2.imshow('mask',mask)#显示掩膜图像
cv2.imshow('res',res)#经过位与运算后的图像
cv2.imshow('smoothed',smoothed)#2D滤波器
cv2.imshow('blur',blur)#高斯模糊滤波
cv2.imshow('median',median)#中值滤波器
cv2.imshow('bilateral',bilateral)#双边滤波
# Press esc on keyboard to exit
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
cap.release()
输出结果:
参考链接:
Python-OpenCV中的filter2D()函数 - Rogn - 博客园www.cnblogs.com1、2D滤波器:cv2.filter2D()
2、均值滤波:blur()
3、方框滤波:boxFilter()
4、高斯模糊:GaussianBlur()
5、中值滤波:medianBlur()
6、双边滤波:bilateralFilter()
7、联合双边滤波:xmingproc.jointBilateralFilter()
8、导向滤波:ximgproc.guidedFilter()
五、图像平滑、滤波_嘻哈吼嘿呵的博客-CSDN博客_cv2.filter2d(img,-1,kernel),-1blog.csdn.net第九节:Morphological Transformations(形态变换)
功能:腐蚀、膨胀、形态学变换-开环、闭环
# Morphological Transformations
# 功能:腐蚀、膨胀、形态学变换-开环、闭环
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
# 颜色空间转换
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#HSV:色度(H)、饱和度(S)、亮度(V)
# hsv( hue sat value )
lower_red = np.array([0,100,100])
upper_red = np.array([50,200,200])
# get mask
mask = cv2.inRange(hsv, lower_red, upper_red)
# detect red
res = cv2.bitwise_and(frame, frame, mask = mask)
kernel = np.ones((5,5), np.uint8)#定义结构元素
erosion = cv2.erode(mask, kernel, iterations = 1)#腐蚀
dilation = cv2.dilate(mask, kernel, iterations = 1)#膨胀
#形态学-开运算,先腐蚀,再膨胀,可清除一些小东西(亮的),放大局部低亮度的区域
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
#形态学-闭运算,先膨胀,再腐蚀,可清除小黑点
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
## It is the difference between input image and Opening of the image
#cv2.imshow('Tophat', tophat)
## It is the difference between the closing of the input image and input image
#cv2.imshow('Blackhat', blackhat)
cv2.imshow('frame',frame)#显示原图
cv2.imshow('res',res)#经过位与运算后的图像
cv2.imshow('erosion',erosion)#腐蚀
cv2.imshow('dilation',dilation)#膨胀
cv2.imshow('opening',opening)#形态学-开运算
cv2.imshow('closing',closing)#形态学-闭运算
# Press esc on keyboard to exit
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
cap.release()
输出结果:
参考链接:
(1)腐蚀、膨胀
腐蚀和膨胀动画演示_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com(2)形态学
opencv -- morphologyEx 开运算、闭运算、形态学梯度、顶帽、黑帽www.cnblogs.comMORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
第十节:Edge Detection and Gradients(边缘检测和梯度)
功能:
# Edge Detection and Gradients
输出结果:
参考链接:
(1)边缘检测-sobel
opencv边缘检测sobel算子 - core! - 博客园www.cnblogs.com(2)边缘检测-拉普拉斯
opencv边缘检测-拉普拉斯算子 - core! - 博客园www.cnblogs.com(3)目标检测-canny
opencv目标检测之canny算法 - core! - 博客园www.cnblogs.com