提前准备
使用工具Python3.5 使用包cv2,numpy
任务1 获取并修改像素值
读取一副图像,根据像素的行和列的坐标获取它的像素值,对于RGB图像而言,返回RGB的值,对于灰度图则返回灰度值
import cv2
import numpy
img = cv2.imread('45.jpg')
px=img[100,100]
print(px)
blue = img[100,100,0]
print(blue)
img[101,101]=[255,255,255]
print(img[101,101])
numpy是经过优化了的进行快速矩阵运算的包,所以不推荐逐个获取像素值并修改能矩阵运算就不要用循环。 例如前5行的后3列,用numpy的array.item()和array.itemset()会更好。但是返回是标量,如果想获得所有RGB的值,需要使用array.item()分割他们。 更好的方法是
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
任务2 获取图像属性
图像属性包括:行,列,通道,图像数据类型,像素数目等
成员1:
img.shape 调用这个成员可以获得图像的形状,返回值是一个包含行数,列数,通道数的元组
实例代码:
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.shape)
如果图像是灰度图,返回值仅有行数和列数,所以通过检查返回值可以判断是灰度图还是彩色图
成员2:
img.size 可以返回图像的像素数目
实例代码:
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.size)
像素的数目=行数 x 列数 x 通道数
成员3
img.dtype返回图像的数据类型,在debug时很重要,因为OpenCV-Python代码中经常出现数据类型的不一致
实例代码:
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.dtype)
总结
(本系列每周不定期更新,谢谢大家支持!)