对于图片的色彩反转问题,可以将其分为两类,一类是灰度图像的颜色反转,另一类是彩色图像的颜色反转。
对于灰度图像的颜色反转,灰度值的取值范围是0-255 ,那么颜色反转就是 255 - 当前灰度值 。
# 灰度图像颜色反转 灰度值的取值范围是0-255 那么颜色反转就是 255-当前灰度值
import cv2
import numpy as np
img = cv2.imread('OpenCV\\image0.JPG', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图像转变成灰度图像
dst = np.zeros((height, width, 1), np.uint8) # 定义一个新的画布,参数“1”表明一个像素由一个颜色组成
for i in range(height):
for j in range(width):
grayPixel = gray[i, j] # 当前灰度值
dst[i, j] = 255 - grayPixel
cv2.imshow('dst', dst)
cv2.waitKey(0) # 使图片窗口停留,不至于一闪而过
cv2.destroyAllWindows() # esc可退出,不然会busy
对于彩色图像颜色反转,彩色图像中,每一个像素点有三个值,就是我们说的RGB。 因此,我们要分别将他们做减法 NEWR = 255 - R
import cv2
import numpy as np
img = cv2.imread('OpenCV\\image0.JPG', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst_01 = np.zeros((height, width, 3), np.uint8) # 定义一个新的画布,参数“3”表明一个像素由3个颜色组成
for i in range(height):
for j in range(width):
(b, g, r) = img[i,j]
dst_01[i, j] = (255-b, 255-g, 255-r )
cv2.imshow('dst_01', dst_01)
cv2.waitKey(0) # 使图片窗口停留,不至于一闪而过
cv2.destroyAllWindows() # esc可退出,不然会busy
在对图片的马赛克处理中,
(1)马赛克有矩形马赛克,圆形马赛克,这里我们使用矩形马赛克,它的大小为10*10。
(2)马赛克本质上是由10*10矩阵中的某一个元素(实际上是第一个位置的元素)替换每一个元素。
实现代码如下:
import cv2
import numpy as np
img = cv2.imread('OpenCV\\image0.JPG', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# 定义马赛克的坐标范围
for i in range(0,300):
for j in range(100,200):
# 以10*10为马赛克的单位
if i%10 == 0 and j%10 ==0:
# 选定在10*10的范围内统一色彩元素
for m in range(10):
for n in range(10):
(b, g, r) = img[i, j] # 选定10*10范围内的某一像素的色彩值,其实就是满足判断语句的那个坐标的像素
img[m+i, n+j] = (b, g, r) # 将接下来的10*10范围的像素色彩值全部换为此色彩值
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows() # esc可退出,不然会busy