像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。
像素是图像构成的基本单位,像素处理是图像处理的基本操作,可以通过位置索引的形式对图像内的元素进行访问、处理。
图像的基本表示方法可以分为:二值图像、灰度图像、彩色图像。
二值图像是指仅仅包含黑色和白色两种颜色的图像。
计算机处理的时候,会将图片划分为一个个小的方块,每一个小方块作为一个独立的处理单元,叫做像素点,每一个白色的方块处理为1,相反黑色的方块处理为0,然后存入计算机。
二值图像虽然表示简单,但是图像不够细腻,如果需要表现出来更多的细节,就需要使用更多的颜色,而不仅仅是二值图像的黑和白。对比于二值图像的0和1,灰度图像采用了更多的数字。
通常计算机将灰度处理为256个灰度级,用数值区间[0,255]表示,255表示纯白色,0表示纯黑色。
可以使用8位二进制表示二值图像,只存在0和255两种灰度级,因此二值图像也算是一种特殊的灰度图像。
部分区域的数值表示:
彩色图像可以表示更丰富的信息。
具有多种色彩空间:RGB、GRAY、XYZ、YCrCb、HSV、HLS、CIELab、CIELuv*、Bayer等。
色彩空间也叫作颜色空间、彩色空间等。
RGB色彩空间较为常用:
在RGB色彩空间内具有三个通道,分别为R通道、G通道、B通道,每个通道的范围都是在数值区间[0,255],然后用三个通道的组合表示各种颜色。
部分RGB颜色对照表:
在计算机中使用三维数组表示一副RGB色彩空间的彩色图像,并且注意在OpenCV中通道的顺序为BGR,也就是在第一个通道存放B的信息,在最后一个通道存放R的信息。
图像可以理解成为一个数组,因此在面向python的OpenCV中,图像就是Numpy库中的数组。
使用Numpy库生成一个全是0的二维数组,来模拟表示一个黑色图像。
import cv2
import numpy as np
temp = np.zeros((100,100),dtype = np.uint8)
print("前\n",temp)
cv2.imshow("qian",temp)
print("读取像素点temp[0,3]=",temp[0,3])
temp[0,3] = 255
print("后\n",temp)
print("读取修改后像素点temp[0,3]=",temp[0,3])
cv2.imshow("hou",temp)
cv2.waitKey()
cv2.destroyAllWindows()
结果展示:
修改前:
读取修改前的像素点
修改前的图像
修改后:
读取修改后的像素点
修改后的图像
(在图像的左上方向有一个白色的点,为修改的结果,为方便观看,大家可以复制程序进行验证,大家观看的时候,可以模拟大一点的数组,现象更加明显)
在本地读取一个灰度图像,然后对数组进行修改。
import cv2
ppp=cv2.imread("D:\pmjcv\pbc.png",0)
cv2.imshow("qian",ppp)
print("前\n",ppp)
for i in range(50,150):
for j in range(50,150):
ppp[i,j]=255
cv2.imshow("hou",ppp)
print("后\n",ppp)
cv2.waitKey()
cv2.destroyAllWindows()
修改前:
修改前像素点
修改前图像
修改后像素点
修改后图像
利用Numpy库生成三维数组,分别表示三个通道的情况,表示彩色图像。
import cv2
import numpy as np
temp = np.zeros((600,900,3),dtype = np.uint8)
temp[:,0:150,0]=255
temp[:,150:300,1]=255
temp[:,300:450,2]=255
temp[:,450:600,0]=255
temp[:,600:750,1]=255
temp[:,750:900,2]=255
print("caise\n",temp)
cv2.imshow("caise",temp)
cv2.waitKey()
cv2.destroyAllWindows()
部分像素点展示
图像展示
利用Numpy库
import cv2
import numpy as np
temp = np.random.randint(0,256,size=[500,600,3],dtype=np.uint8)
print("caise\n",temp)
cv2.imshow("caise",temp)
cv2.waitKey()
cv2.destroyAllWindows()
在图像处理中,我们要针对某一个特定区域进行处理的时候,就会对这一个特定区域感兴趣,这个区域就可以称作为感兴趣区域(ROI),设置成感兴趣区域之后,就可以对这个区域整体进行操作,方便减少处理的时间,更加高效。
import cv2
temp = cv2.imread("D:\pmjcv\pbc.png",cv2.IMREAD_UNCHANGED)
roi = temp[200:300,200:300]
cv2.imshow("yuanshitu",temp)
cv2.imshow("roi",roi)
cv2.waitKey()
cv2.destroyAllWindows()
面向python的像素处理,还有很多功能,上说内容是这段时间的学习总结仍然还不是很全面,需要进一步深入学习、向其他人探讨。
上述内容为学习总结,希望对大家可以有所帮助,如有遗漏或者错误请在评论区中指正,期待与大家的讨论!!!