初学opencv

一、图像的IO操作

1.读取图像

cv.imread(参数1,参数2)

参数1:要读取的图像路径

参数2:读取方式的标准

1:用彩色方式读取

0:用灰度模式读取

-1:包括alpha通道的图像加载模式

示例:

img = cv.imread("test01.jpg",1)
# 用彩色模式读取图片

2.显示图像

cv.imshow(参数1,参数2:)

参数1:显示窗口名

参数2:图像变量名

plt.imshow(img[:,:,::-1])
plt.show()

3.保存图像

cv.imwrite(参数1,参数2)

参数1:保存路径

参数2:图像变量名

二、在图像上绘制图形

0.创建空白图像

img = np.zeros((512,512,3),np.uint8)

1.直线

cv.line(参数1,(a1,a2),(b1,b2),参数2,参数3)

参数1:要绘制的图像变量名

a:直线起始坐标

b:直线终点坐标

参数2:颜色

参数3:宽度(像素大小)

2.圆形

cv.circle(参数1,(a1,a2),参数2,参数3,参数4)

参数1:要绘制的图像变量名

a:圆心坐标

参数2:半径

参数3:颜色

参数4:宽度(等于-1时为实心圆)

3.矩形

参数1:要绘制的图像变量名

a:左上角坐标

b:右下角坐标

参数2:颜色

参数3:宽度

cv.rectangle(参数1,(a1,a2),(b1,b2),参数2,参数3)

4.文字

参数1:要绘制的图像变量名

参数2:写入内容

a:位置

参数3:字体类型

参数4:大小

参数5:颜色

参数6:宽度

参数7:线型

cv.putText(参数1,参数2,(a1,a2),参数3,参数4,参数5,参数6,参数7)

三、图像基础操作的其他操作

获取图像中的像素值

例:

px = img[a,b]

返回值为三个元素的数组 (颜色用三个数的数组表示)

获取图像中的某种颜色强度

例:

blue = img[a,b,c]
# a,b,c为代表这个颜色的参数

修改某位置的像素值

img[a,b] = [c,d,e]

获取图像属性

形状:img.shage(行数,列数,通道数)  注:通道数为颜色数,彩色为3

图像大小:img.size

数据类型:img.dtype

通道的拆分与合并

拆分:

b,g,r = cv.split(img)

合并:

img = cv.merge((b,g,r))

色彩空间的转换

cv.cvtColor(参数1,参数2)

参数1:需要转换的图像变量名

参数2:转换方式

cv.COLOR_BGR2GRAY: BGR<=>Gray

cv.COLOR_BGR2HSV: BGR -> HSV

四、图像的算术操作

1.图像的加法

numpy加法:取模运算

OpenCV加法:饱和运算

当像素值溢出255时,例:250+10

OpenCV结果:255

numpy结果:4

OpenCV语法:

img1 = cv.add(图像a,图像b)

numpy语法:

img2 = 图像1 +图像2

2.图像的混合

加权加法

img = cv.addWeighted(图像1,权重1,图像2,权重2,常数)

五、图像的几何变换

1.图像缩放

cv.resize(src,dsize,fx = ,fy = ,interpoltion)

src:图像名,

dsizd:绝对尺寸

fx,fy:相对尺寸(比例缩放)

internpoltion:差值方法

2.图像平移

获取图像的行列数:

rows,cols =img.shape[:2]

平移矩阵:

大小2*3

M = np.float32.([1,0,100],[0,1,50])
dst = cv.warpAffine(img,M,(rowe,cols))
#                  原图 平移矩阵 移动后图像大小

3.图像旋转

M = cv.getRotationMatrix20((rows/2,cols/2),90,1) # 旋转矩阵的获取
#                          旋转中心,       旋转角度  缩放比例
def = cv.warAffine(img,M,(cols,rows))

4.仿射变换

缩放、平移、旋转的组合

使用仿射变换:

1.创建三个点

2.获取三个点原始图像位置坐标,和变换后图像坐标

pts1 = np.float32([,],[,],[,])
pts2 = np.float32([,],[,],[,])
M = cv.getAffineTransform(pts1,pts2)
dat = warpAffine(img,M,(cols,rows))

5.透射变换

pts1 = np.float32([,],[,],[,],[,])
pts2 = np.float32([,],[,],[,],[,])
M = cv.getPerspectiveTransform(pts1,pts2)
dat = warpPerspective(img,M,(cols,rows))

6.图像金字塔

不同分辨率的图片

down_img = cy.pyrDown(img) # 下采样 大

up_img = cy.pyrUp(img) # 上采样 小

六、形态学操作

1.连通性

邻域:

连通性满足条件

(1)两个像素点相邻

(2)两个像素点的灰度值满足相似性准则

4连通:两像素在4邻域内

8连通:两像素在8邻域内

m连通:关键在于无交集,即无公共4邻域像素

2.腐蚀和膨胀

复杂的概念,但实际结果就是找到所有能覆盖b结构的a结构中的点

取出高亮区域的方法

cv.erode(img,kernel,iterations)
         原图 核结构   次数

与腐蚀相反,膨胀是找到无法让b结构完全覆盖的a结构中的点,让其覆盖上b结构

cv.dilate(img,kernel,iterations)

3.开运算、闭运算

(特点:不可逆)

开运算:先腐蚀,后膨胀 

断连接,消除小的噪点

闭运算:先膨胀,后腐蚀

填充操作

cv.morphologyEx(img,op,kernel)
              原图  运算方式   核结构

op:

开运算:cv.MORPH_OPEN

闭运算:cv.MORPH_CLESE

4.礼帽,黑帽

礼帽:原图和开运算后的差

黑帽:原图和闭运算后的差

cv.morphologyEx(img,op,kernel)
              原图  运算方式   核结构

礼帽:cv.MORPH_TOPHAT

黑帽:cv.MORPH_BLACKHAT

七、噪声

1.椒盐噪声

随机黑白点

2.高斯噪声

灰度值服从正太分布

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值