opencv+python 计算机视觉学习(一):图像的基本操作

一,roi操作图像感兴趣部位
1.1截取图像的部分区域
image=iamge[100:200, 100:200]
#这样就可以截取图像长和宽100:到200的区域
image= image[:,:,x]
#这里的x可以选取0,1,2,分别代表b,g,三个色道

1.2 图像的二值化和灰度化
ret,dst=cv2.threshold(src,thresh,maxval,type[,dst]) → dst
简单阈值函数将原图像二值化,其中各参数分别代表原图像、阈值、二进制值的最大值、阈值处理的方法
其中thresh表示的是阈值,当其为0的时候,函数会自定获取阈值

cv2.cvtColor(src,code[,dst[,dstCn]]) → dst
类似于这个
img1_gray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
颜色空间转换函数,code为颜色空间转换模式,常用的有cv2.COLOR_BGR2GRAY:将BGR格式的转换为灰度格式的图像
cv2.COLOR_BGR2HSV:将BGR格式的图像转换为HSV格式的图像

1.3图像的噪声处理
首先是噪声的原理:在图像的产生,传输和生成过程中受到噪声的感染,影响人们的使用。
常见的噪声:椒盐噪声和高斯噪声。椒盐噪声就是说图像上一些不规律的点,一般是收到外界干扰产生的。而高斯噪声则是服从高斯函数的一类噪声。我们已于处理。
滤波:分为平滑滤波或者是锐化滤波。平滑滤波是把图像上的点较为尖锐的点进行滤波,给他过滤掉,又可以用在提取较大的目标前过滤去除较小的细节或将目标内的小间断连接起来。
锐化滤波是对于高的像素没有影响,对于低的点怎是产生分化,让图像的边缘变得锐化起来。用来增加被模糊的图像。

滤波的特点分为线性滤波和非线性滤波。线性邻域滤波是一种常用的邻域算子。邻域算子(局部算子)是利用给定像素周围的像素值的决定此像素的最终输出值的一种算子。平滑(smoothing)/模糊(bluring)的数学理论幕后黑手——卷积

1.3.1均值滤波:(简单滤波)
就是把一个算子的几个像素求平均值,然后将其赋值给中间的算核。
作用:将图像模糊化处理。
ave = cv2.blur(img, (9, 9))
1.3.2中值滤波(取中值)
就是把算子里面的像素排列取他的中间值,作为算核的值。
作用:处理椒盐噪声
med = cv2.medianBlur(img, 3)
1.3.3高斯滤波
作用:主要就是用于处理高斯噪声
高斯滤波使用的是是给算子的每个位置给不同的权重,然后和图像的像素作相乘,然后将得到的和赋值给算核。
Gausi = cv2.GaussianBlur(img, (3,3), 1)
1.3.4双边滤波
作用:类似于高斯滤波
双边滤波是在高斯滤波的基础上进行一个多余的操作,起到平滑周边的目的。
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None) 像素直径 颜色空间过滤 坐标空间过滤
#颜色空间过滤、坐标空间过滤越大,滤波效果越好
三个重要参数:

第一个参数d是滤波过程中的像素邻域直径;

第二个参数是用于颜色域高斯核的参数,称作sigmaColor,和高斯滤波中的sigma参数类似;

第三个参数是空间域中的高斯核宽度,称作sigmaSpace。

注;这里一个关于如何在一个python程序中展示几张图片的方法
np.hstack()对图像进行水平堆叠
np.vstack()对图像进行竖直堆叠
cv2.namedWindow(‘huidu’, cv2.WINDOW_NORMAL)
cv2.imshow(“huidu”, x3)
cv2.waitKey()

1.3.5
Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Python中,使用Sobel的算子的函数原型如下:

dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
函数返回其处理结果。
前四个是必须的参数:
第一个参数是需要处理的图像;
第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
其后是可选的参数:

dst不用解释了;
ksize是Sobel算子的大小,必须为1、3、5、7。
scale是缩放导数的比例常数,默认情况下没有伸缩系数;
delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。

1.4图像的轮廓的提取

cv2.findContours函数选取轮廓数目
contours, hierarchy = cv2.findContours(image2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
x = np.array(contours).shape[0]
cv2.drawContours(image2, contours, -1, (100, 100, 0), 2) ,这是在指定的图片上进行绘画

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值