+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-03(49)

2020-04(67)

2020-05(28)

2020-06(46)

2020-07(42)

基于Python的Opencv学习

发布于2020-05-31 16:18     阅读(708)     评论(0)     点赞(23)     收藏(1)


0

1

2

3

4

5

6

7

8

基于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,效果就很明显了。
这是原图
这是读取的灰度图片
这个是效果图,就是给100:1000那个像素点全都变白了
上面三幅图片分别是原图,灰度图,修改像素点后的图片。

二.获取像素属性

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
>>> 

在这里插入图片描述
分别输出的是图像形状,数目和图像类型三个属性。

今天讲的比较简单,全是一些非常非常基础的知识,小伙伴们就当作休闲娱乐来看一下把!
(转载注明出处)

原文链接:https://blog.csdn.net/weixin_46174202/article/details/106424906

0

1

2

3

4

5

6

7

8



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/398963/166d92d278eabd84e2a0/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

23 0
收藏该文
已收藏

评论内容:(最多支持255个字符)