基于Python的Opencv学习第二天
各位小伙伴们,大家好。这是我学习Opencv的第二天,今天算是正式认识一下Opencv的其他基础的函数,我们立即开始把。
一.像素处理
1.读取像素
返回值=图像[位置参数]
这里的返回值可以不需要,可以直接给图像的位置参数,就可以获得那个像素位置点的图像。
读取像素分灰度图像和彩色图像,首先我们来看一下灰度图像的读取:
灰度图像,返回灰度值
示例:
p=img[88,142]
print(p
)
该示例表示,如果我们将该img图像看作一个由很多数字构成的矩阵,那么我们访问的就是该图像的第88行142列的那个位置上的像素
BGR图像,返回值为B,G,R的值
示例:
第一种读取BGR图像像素的方法,返回值为一个值
①blue=img[78,125,0]
print(blue)
②green=img[78,125,1]
print(green)
③red=img[78,125,2]
print(red)
因为BGR图像是有三个通道(可以参照我上篇博客对BGR图像的介绍),那么括号里第三个数字代表我们选择的是第几个通道,如blue=img[78,125,0]这里0就代表我们选取第一个通道的第78行第125列那个像素点(注意,这里的三个通道单独来看可以类比同灰度通道来理解,取出第一个通道,此时又构成了一个由很多数字构成的矩阵,我们仅仅在该矩阵进行取像素点的工作)。
第二种读取BGR图像像素的方法,返回值为三个值
p=img[78,125]
print(p)
这里我们读取该BGR图像第78行第125列的像素点,此时会得到三个数值,分别代表B,G,R三个通道上像素点的值。
2.修改像素
对读取像素有了了解之后,修改像素就比较方便了,我们直接在读到像素的那个点赋右值即可。
函数可以表示为
图像[位置参数]=想赋予的值
示例:
灰度图像的修改像素:
img[88,99]=255
BGR图像的修改像素:
①分通道修改:
img[88,99,0]=255
img[88,99,1]=255
img[88,99,2]=255
②不分通道修改:
img[88,99]=[255,255,255]
这里我突然想强调一下右值必须是"[ ]“读入和修改,并且在修改像素和读入像素的同时也是采用”[ ]",如果大家对Python很熟悉,其实这是Python里面的列表,Python用列表读入数据。
光说不练可不行,一起来看效果把。
>>> import cv2
>>> i=cv2.imread(r"C:\Users\LT010407\Desktop\2.jpg",cv2.IMREAD_GRAYSCALE)
>>> cv2.imshow("orginal",i)
>>> i[100,100]=255
>>> print(i[100,100])
255
>>> cv2.imshow("result",i)
>>> i[100:1000,100:1000]=255
>>> print(i[100:1000,100:1000])
[[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
...
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]]
>>> cv2.imshow("result1",i)
这个代码是先读取像素,然后修改了[100,100]值为255,但是由于我的图片尺寸比较大,导致效果看不出来,于是我又给从100-1000位置的行和列改为255,效果就很明显了。

上面三幅图片分别是原图,灰度图,修改像素点后的图片。
二.获取像素属性
1.形状属性
当我们想要了解一个图像的形状属性时候,需要调用我们的shape函数,该函数可以获取图像的形状,返回包含行数,列数,通道数的元组。
灰度图 返回行数,列数
彩色图 返回行数,列数,通道数
示例:
①img1=cv2.imread(灰度图像)
print(img.shape)
得到返回值为:>>>(512,512)
②img2=cv2.imread(彩色图像)
print(img.shape)
得到返回值为>>>(512,512,3)
在这里我们分别得到两种不同的返回值,其中灰度图的返回值为两个512,可以类比理解为一个完整的矩阵,他有512行和512列,而彩色图也可以这样理解,不同的是彩色图的第三个数字3代表的是其通道数为3,分别是R,G,B三个通道。
2.像素数目属性
当我们想要了解一个图像的像素数目属性时候,需要调用我们的size函数,该函数可以获取图像的像素数目。
灰度图 返回:行数×列数
彩色图 返回:行数 ×列数×通道数
示例:
img=cv2.imread(图像名)
print(img.size)
返回值是>>>786432
3.图像类型属性
当我们想要了解一个图像的类型属性时候,需要调用我们的dtype函数,这里返回的是图像的数据类型,此时没有灰度图和彩色图区分,返回的都是数据类型。
示例:
img=cv2.imread(图像名)
print(img.dtype)
返回值是>>>uint8
这里uint8只不过是一个重定义,如果大家了解单片机就知道,单片机里面全是uint8,uint16等,看似高大上,其实就是一个重定义。像这个uint8是8位无符号整型,uint16是16位无符号整型。
在这里我用了单片机里面的代码说明,相信大家已经揭开了uint8的神秘面纱。
接下来,我直接上代码和结果了
>>> import cv2
>>> img=cv2.imread(r"C:\Users\LT010407\Desktop\0.jpg",cv2.IMREAD_GRAYSCALE)
>>> print(img.shape)
(400, 400)
\
>>> print(img.size)
160000
>>> print(img.dtype)
uint8
>>>

分别输出的是图像形状,数目和图像类型三个属性。
今天讲的比较简单,全是一些非常非常基础的知识,小伙伴们就当作休闲娱乐来看一下把!
(转载注明出处)
来源:oschina
链接:https://my.oschina.net/u/4365833/blog/4298134