opencv-python教程学习系列7-opencv图像基本操作

前言

opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的基本操作,坚持学习,共同进步。

系列教程参照OpenCV-Python中文教程

系统环境

系统:win7_x64;

python版本:python3.5.2;

opencv版本:opencv3.3.1;

内容安排

1.知识点介绍;

2.测试代码;

具体内容

1.知识点介绍;

使用的库包含cv2、numpy和matplotlib,包含修改图像像素、获取图像属性、提取ROI、拆分合并通道、图像填充等内容;

1.1 获取并修改图像像素;

1)读取一副图像,根据像素的行和列的坐标获取它的像素值,返回RGB的值,灰度图则返回灰度值;图像中的坐标是从0开始计数的。

1
2
3
4
5
6
px=img[100,100]#某坐标对应的像素值
print(px)
blue = img[100,100,0]#数字0表示选择BGR通道
print(blue)
img[101,101]=[235,255,255]
print(img[101,101])

2)numpy是经过优化了的进行快速矩阵运算的包,不推荐逐个获取像素值并修改,能矩阵运算就不要用循环。
建议使用numpy的array.item()和array.itemset()函数。但是返回是标量,如果想获得所有RGB的值,需要使用array.item()分割他们。

1
2
3
4
5
#numpy
print(img[10, 10])
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))

1.2 获取图像属性,包括行、列、通道数目、图像数据类型、像素数目等;

image.shape - 获取图像的形状,返回值是一个包含行数/列数/通道数的元组,如果图像是灰度图,返回值仅有行数和列数,

可通过检查返回值可以判断是灰度图还是彩色图;

image.size - 获取图像的像素数目;

img.dtype - 图像的数据类型,在debug时很重要,因为OpenCV-Python代码中经常出现数据类型的不一致;

1
print(img.dtype)

1.3 图像ROI,对图像的特定区域操作。ROI是使用numpy索引来获得的。要先知道图像尺寸,以及要移动的图像的像素坐标,可以使用matplotlib!!

1
ball =img[300:350,230:300]

1.4 拆分及合并图像通道,cv2.split()是比较耗时的操作,能用numpy就尽量使用。

1
2
3
4
r,g,b=cv2.split(img)#拆分
img=cv2.merge([r,g,b])#合并
b=img[:,:,0]#拆分b通道
img[:,:,2]=0#使用numpy索引使所有红色通道值都为0

1.5 图像扩边(填充),使用cv2.copyMakeBorder()函数。这经常在卷积运算或0填充时被用到;

具体的参数有输入图像、上下左右对应边界的像素数目、边界类型;

cv2.BORDER_CONSTANT添加有颜色的常数值边界,还需要下一个参数(value);
cv2.BORDER_REFLIECT边界元素的镜像。例如:fedcba | abcdefgh | hgfedcb;
cv2.BORDER_101或者cv2.BORDER_DEFAULT跟上面一样,但稍作改动,例如:gfedcb | abcdefgh | gfedcba;
cv2.BORDER_REPLICATE复后一个元素。例如: aaaaaa| abcdefgh|hhhhhhh;
cv2.BORDER_WRAP 不知怎么了, 就像样: cdefgh| abcdefgh|abcdefg;
value边界颜色;

1
2
3
blue = [0,0,255]#分别表示RGB通道;
constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=blue)
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')

2.测试代码;

测试结果显示

参考

1. opencv图像基本操作

posted on   鹅要长大  阅读(724)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示