OpenCV05:图片色彩反转及马赛克效果

对于图片的色彩反转问题,可以将其分为两类,一类是灰度图像的颜色反转,另一类是彩色图像的颜色反转。

对于灰度图像的颜色反转,灰度值的取值范围是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 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值