计算机视觉及图像预处理 03色彩变化(二)

对图像某个通道进行操作

我们这次代码处理的图像是data数据包里的“opencv”

https://download.csdn.net/download/llf000000/86881751

显示原图

# 色彩通道操作:通道表示为BGR
import numpy as np
import cv2

im = cv2.imread("../data/opencv2.png")
cv2.imshow("im", im)

cv2.waitKey()  # 等待用户按某个按键
cv2.destroyAllWindows()  # 销毁所创建的窗口

取出蓝色通道,当显示(单通道图像,所以显示成灰度图像)

# 色彩通道操作:通道表示为BGR
import cv2

im = cv2.imread("../data/opencv2.png")
cv2.imshow("im", im)

# 取出蓝色通道,当显示(单通道图像,所以显示成灰度图像)
b = im[:, :, 0]  # 0为第一个通道蓝色通道
# 第一个是高度(我们切出所有的),第二个是宽度(我们切出所有的),通道方向我们切出0
cv2.imshow("b", b)
# 由于只有一个通道,系统会把它当作灰色图像去显示

cv2.waitKey()  # 等待用户按某个按键
cv2.destroyAllWindows()  # 销毁所创建的窗口

去掉蓝色通道(将蓝色通道全部置0)

# 色彩通道操作:通道表示为BGR
import cv2

im = cv2.imread("../data/opencv2.png")
cv2.imshow("im", im)

# 取出蓝色通道,当显示(单通道图像,所以显示成灰度图像)
b = im[:, :, 0]  # 0为第一个通道蓝色通道
# 第一个是高度(我们切出所有的),第二个是宽度(我们切出所有的),通道方向我们切出0
cv2.imshow("b", b)
# 由于只有一个通道,系统会把它当作灰色图像去显示

# 去掉蓝色通道(将蓝色通道全部置0)
im[:, :, 0] = 0
cv2.imshow("im-b0", im)
cv2.waitKey()  # 等待用户按某个按键
cv2.destroyAllWindows()  # 销毁所创建的窗口

去掉绿色通道(索引为1的通道)

# 色彩通道操作:通道表示为BGR
import cv2

im = cv2.imread("../data/opencv2.png")
cv2.imshow("im", im)

# 取出蓝色通道,当显示(单通道图像,所以显示成灰度图像)
b = im[:, :, 0]  # 0为第一个通道蓝色通道
# 第一个是高度(我们切出所有的),第二个是宽度(我们切出所有的),通道方向我们切出0
cv2.imshow("b", b)
# 由于只有一个通道,系统会把它当作灰色图像去显示

# 去掉蓝色通道(将蓝色通道全部置0)
im[:, :, 0] = 0
cv2.imshow("im-b0", im)

# 去掉绿色通道(索引为1的通道)
im[:, :, 1] = 0
cv2.imshow("im-b0-g0", im)

cv2.waitKey()  # 等待用户按某个按键
cv2.destroyAllWindows()  # 销毁所创建的窗口

 直方图均衡化示例

# 直方图均衡化示例
import numpy as np
import cv2
from matplotlib import pyplot as plt

# 直方图均衡化
im = cv2.imread("../data/sunrise.jpg", 0)  # 读取灰度图像
cv2.imshow("orig", im)

cv2.waitKey()
cv2.destroyAllWindows()

直方图均衡化

# 直方图均衡化示例
import numpy as np
import cv2
from matplotlib import pyplot as plt

# 直方图均衡化
im = cv2.imread("../data/sunrise.jpg", 0)  # 读取灰度图像
cv2.imshow("orig", im)

# 直方图均衡化
im_equ = cv2.equalizeHist(im)
cv2.imshow("equ1", im_equ)
cv2.waitKey()
cv2.destroyAllWindows()


绘制灰度直方图 

# 直方图均衡化示例
import numpy as np
import cv2
from matplotlib import pyplot as plt

# 直方图均衡化
im = cv2.imread("../data/sunrise.jpg", 0)  # 读取灰度图像
cv2.imshow("orig", im)

# 直方图均衡化
im_equ = cv2.equalizeHist(im)
cv2.imshow("equ1", im_equ)

# 绘制灰度直方图
##原始直方图绘制
print(im.ravel())
plt.subplot(2, 1, 1)
plt.hist(im.ravel(),  # ravel返回一个连续的扁平数组
         256,#256个柱 
         [0, 256],#x轴的范围 
         label="orig")
plt.legend()  # 显示图例
## 均衡化处理后的直方图
plt.subplot(2, 1, 2)
plt.hist(im_equ.ravel(), 
            256,
             [0, 256],
                 label="equalize")
plt.legend()
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

 

彩色图像亮度直方图均衡化

# 彩色图像亮度直方图均衡化
import cv2

# 读取原始图片
original = cv2.imread('../data/sunrise.jpg')
cv2.imshow('Original', original)
'''读取出来默认是RGB的色彩空间,RGB的色彩空间是不含亮度通道的,
所以我们要将他转换成包含亮度通道的色彩空间.
这里做出了转换
'''
# BRG空间转换为YUV空间
# YUV:亮度,色度,饱和度,其中Y通道为亮度通道
yuv = cv2.cvtColor(original, cv2.COLOR_BGR2YUV)
'''将BGR的色彩空间转换成了YUV的色彩空间'''
print("yuv.shape:", yuv.shape)

yuv[..., 0] = cv2.equalizeHist(yuv[..., 0])  # 取出亮度通道,均衡化并赋回原图像
equalized_color = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR)
cv2.imshow('Equalized Color', equalized_color)
'''imshow默认显示的BGR的格式'''


cv2.waitKey()
cv2.destroyAllWindows()

import cv2
import numpy as np

im = cv2.imread("../data/opencv2.png")  # 默认情况都是读取的是彩色图像
cv2.imshow('opencv', im)
# BRG ==> YUV

yuv = cv2.cvtColor(im, cv2.COLOR_BGR2YUV)
# 取出亮度通道,进行均衡化处理,并将均衡化处理后的值赋值回原图像
yuv[..., 0] = cv2.equalizeHist(yuv[..., 0])  # "..."表示行和列取出所有的,“0”表示通道索引,取0通道的
'''用equalizeHist进行直方图均衡化处理,处理以后的值重新赋值给亮度通道
把原通道给覆盖掉'''

# YUV==》转回去转成BGR
equalize_color = cv2.cvtColor(yuv, cv2.COLOR_YUV2RGB)
cv2.imshow("equalized_color", equalize_color)

cv2.waitKey()  # 等待用户按下某个键
cv2.destroyAllWindows()  # 销毁所有创建的窗口

二值化和反二值化

# 二值化处理
import cv2 as cv

# 读取图像
img = cv.imread("../data/lena.jpg", 0)
cv.imshow("img", img)  # 显示原始图像

# 二值化
'''就是将图片变成两种颜色'''
t, rst = cv.threshold(img, 127,#阈值
                      255,#大于阈值的
                      cv.THRESH_BINARY)#二值化
cv.imshow("rst", rst)  # 显示二值化图像

# 反二值化
t, rst2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY_INV)#反二值化·1       
cv.imshow("rst2", rst2)  # 显示反二值化图像

cv.waitKey()
cv.destroyAllWindows()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值