这篇教程深入学习Python+Opencv常用四种图像处理操作写得很实用,希望能帮到您。 opencv图像处理(深度学习中常用的)
改变色彩空间: cv.cvtColor()cv.cvtColor(img, flag) 常用的flag有:cv.COLOR_BGR2GRAY (BGR->GRAY)、cv.COLOR_BGR2HSV img = cv.imread(r'E:/0_postgraduate/test.jpg')gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)cv.imshow('img', img)cv.imshow('img_gray', gray)k = cv.waitKey(0)if k & 0xFF == ord('q'): cv.destroyAllWindows() 
我们可以看看flag都有哪些: flags = [i for i in dir(cv) if i.startswith('COLOR_')]print( flags )
改变图像大小:cv.resize()cv.resize(img, (width, height)) - img:原始图像
- width:缩放后图像的宽度
- height:缩放后图像的高度
img = cv.imread(r'E:/0_postgraduate/test.jpg')img_resize = cv.resize(img, (500, 600))cv.imshow('img shape: {} x {}'.format(img.shape[1], img.shape[0]), img)cv.imshow('img_resize shape: {} x {}'.format(img_resize.shape[1], img_resize.shape[0]), img_resize)k = cv.waitKey(0)if k & 0xFF == ord('q'): cv.destroyAllWindows() 
比如某些网络要求输入的图像必须是固定大小的:256 x 256这么大的,这时就可以用cv.resize()对大小不一的图像进行缩放。
二维卷积操作cv.filter2D()+轨迹条动态控制图像参数:cv.createTrackbar()、cv.getTrackbarPos() 卷积操作是什么这里就不再介绍了。 cv.filter2D(img, -1, kernel) - img:原始图像
- -1:这个参数应该是输出图像,没什么用,填-1就行
- kernel:卷积核,一个二维数组
而至于cv.createTrackbar()、cv.getTrackbarPos(),这两个函数可以很方便的动态调节图像的参数,很直观地看到调节的效果: cv.createTrackbar() 第一个参数是轨迹栏名称 第二个参数是它所属的窗口名称, 第三个参数是默认值, 第四个参数是最大值, 第五个参数是执行的回调函数每次轨迹栏值都会发生变化,即每次滑动轨迹条时都会调用该参数。 cv.getTrackbarPos() 第一个参数是滑动条名字, 第二个时所在窗口, 返回值是滑动条的数值 # cv.createTrackbar() 和 cv.getTrackbarPos()测试def nothing(*arg): passimg = cv.imread(r'E:/0_postgraduate/test.jpg')img_original = imgcv.namedWindow('image_test')cv.createTrackbar('kernel_width', 'image_test', 1, 30, nothing)cv.createTrackbar('kernel_height', 'image_test', 1, 30, nothing)while 1: w = cv.getTrackbarPos('kernel_width', 'image_test') h = cv.getTrackbarPos('kernel_height', 'image_test') print('w: {} h: {}'.format(w, h)) if(w!=0 and h!=0): kernel = np.ones((w, h), np.float32)/(w*h) img = cv.filter2D(img_original, -1, kernel) cv.imshow('image_test', img) else: cv.imshow('image_test', img_original) k = cv.waitKey(5) if k & 0xFF == ord('q'): breakcv.destroyAllWindows() 


常用模糊常用的模糊有平均化模糊:cv.blur()和高斯模糊:cv.GaussianBlur() (1) cv.blur() 平均化模糊cv.blur()就是让原始图像与一个全1的卷积核做卷积,然后将得到的值除以卷积核中像素的总个数,这么说太绕了,直接上图: 比如我选的卷积核为3x3大小,则原始图像要与如下的卷积核做卷积: 
cv.blur(img, (weight, height)) - img:原始图像
- weight:卷积核的宽
- height:卷积核的长
(2) cv.GaussianBlur() 高斯模糊是在平均化模糊基础上的改进,考虑了距离对于中心像素的影响:与中心像素距离越近的像素拥有越高的权重,其实超级简单。高斯模糊的原理可以参考:python实现高斯模糊及原理详解 cv.GaussianBlur(img, (weight, height), sigmaX, sigmaY) - img:原始图像
- weight:卷积核的宽
- height:卷积核的长
- sigmaX:二维高斯函数x的偏差
- sigmaY:二维高斯函数y的偏差
注意: 核的宽度和高度,应该是正数和奇数。我们还应该指定X和Y方向的标准偏差,分别为sigmaX和sigmaY。如果只指定sigmaX,sigmaY将被视为与sigmaX相同。如果两者都是零,则根据核大小计算。高斯模糊对去除图像中的高斯噪声非常有效。 img = cv.imread(r'E:/0_postgraduate/test.jpg')img_blur = cv.blur(img, (5,5))img_gaussian = cv.GaussianBlur(img, (5,5), 0)cv.imshow('image_blur', img_blur)cv.imshow('image_gaussian', img_gaussian)k = cv.waitKey(0)if k & 0xFF == ord('q'): cv.destroyAllWindows() 
到此这篇关于深入学习Python+Opencv常用四种图像处理操作的文章就介绍到这了,更多相关Python Opencv 图像处理内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! Python实现聪明的尼姆游戏 Python多线程即相关理念详解 |