OpenCV之像素点的运算
1. 图像像素值的四则运算
OpenCV中的图像对象本质上是numpy的ndarray对象,因此对图像像素点的四则运算均是对ndarray中的元素进行四则计算,OpenCV提供相应的API,具体如下:
import cv2 as cv
import numpy as np
path = "C:\\Users\\27914\\Desktop\\images\\test2.jpg"
image = cv.imread(path)
blank = np.zeros_like(image)
h,w,c = blank.shape
for row in range(h):
for col in range(w):
blank[row,col] = (2,2,2)
add = cv.add(image,blank)#提高亮度(纯像素)
sub = cv.subtract(image,blank)#降低亮度(纯像素)
mul = cv.multiply(image,blank)#提高对比度(纯像素)
div = cv.divide(image,blank)#降低对比度(纯像素)
cv.imshow("image",image)
cv.imshow("add",add)
cv.imshow("sub",sub)
cv.imshow("mul",mul)
cv.imshow("div",div)
cv.waitKey(0)
cv.destroyAllWindows()
本例是将一张图片与一张与其大小相同的纯像素(像素值均为2)的图像进行计算。
原图:
加法:
减法:
乘法:
除法:
加法操作是将图片的亮度提高,减法则是将亮度降低,乘法操作是在提高亮度的同时提高了对比度,除法降低了对比度,也降低了亮度。需要注意的是在进行四则运算时两个对象中其一要为纯像素图像,两个非纯像素图像进行四则运算是无意义的,同时还应注意两个图像的宽高通道数均需要一致,像素点类型也要保持相同,在BGR色彩空间中,像素值在0~255之间,对应numpy的uint8类型,必要时需要进行转换。
2. 图像像素值的统计
图像的像素统计一般是计算图像各通道像数值的最大值,最小值,均值和标准差,具体如下:
import cv2 as cv
import numpy as np
path = "C:\\Users\\27914\\Desktop\\images\\test1.jpeg"
image = cv.imread(path)
max = np.max(image[:,:,0])
min = np.min(image[:,:,0])
mean,std = cv.meanStdDev(image)
print("max:%d min:%d\n "%(max,min),"mean:\n",mean,"\nstd:\n",std)
计算各通道的最大值最小值直接使用numpy的API,均值和标准差则是用的OpenCV的API。
浅谈各个数据的作用:
各通道的最大值最小值一般分别为255和0,反映图像各个通道的最大亮度和最小亮度
均值则是反映各个通道整体的明暗程度,均值小说明图像整体偏暗,均值大说明图像整体偏亮
标准差反映的是各个通道中像素值分布的散乱情况,标准差大说明像素值变化较大,包含的信息就越多,标准差越小说明像素值变化较小,包含的信息较少,当它为0时,该图片为空白图片,基本不包含信息。
3. 图像的逻辑运算
图像的逻辑运算是将参与计算的图像对应位置像素值按照与或非的规则进行逻辑运算得到新的图,具体如下:
import cv2 as cv
import numpy as np
image1 = np.zeros((500,500,3),dtype=np.uint8)
image1[:,:] = (0,255,0)
image2 = np.zeros((500,500,3),dtype=np.uint8)
image2[:,:] = (255,0,255)
and_ = cv.bitwise_and(image1,image2)
not_image1 = cv.bitwise_not(image1)
or_ = cv.bitwise_or(image1,image2)
xor_ = cv.bitwise_xor(image1,image2)
cv.imshow("image1",image1)
cv.imshow("image2",image2)
cv.imshow("and",and_)
cv.imshow("not_image1",not_image1)
cv.imshow("or",or_)
cv.imshow("xor",xor_)
cv.waitKey(0)
cv.destroyAllWindows()
本例用到的都是纯像素图像,原始的两张图为:
与操作:
同或操作:
异或操作:
非操作:
作用:逻辑操作能够与二值化操作配合,将原图中的某一部分保留而其他部分替换成空白,降低噪声(背景较为简单的情况下)。
- 点赞
- 收藏
- 关注作者
评论(0)