OpenCV-Python小白进阶之灰度转化、分离RGB与直方图显示

OpenCV-Python小白进阶之灰度转化、分离RGB与直方图显示

条件

环境:OpenCV Pycharm python3.7
素材:
在这里插入图片描述

转化为灰度图

函数:

cv2.imread(path)

载入图片

cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

把img图片从RGB格式切换为GRAY

cv2.namedWindow(name, aotusize)

给窗口命名,大小不可自由调整

cv2.resizeWindow(name, length, width)

给窗口设置长与宽

cv2.imshow(name, img)

显示img图片

cv2.imwrite(path, img)

创建path路径并写入img图片

代码实现

import cv2

img = cv2.imread('p1.jpg')
img0 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imwrite('p2.jpg', img0)

cv2.namedWindow('figure1', 0)
cv2.resizeWindow('figure1', 960, 480)
cv2.imshow('figure1', img0)

输出

[外链图片转存失败(img-rE96Gdhd-1566195066220)(p2.jpg)]

分离RGB

函数

cv2.split(img)

分离img图片的RGB,注意!!!电脑是以BGR的顺序分离的

代码实现

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('p1.jpg')
img0 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imwrite('p2.jpg', img0)

cv2.namedWindow('figure1', 0)
cv2.resizeWindow('figure1', 960, 480)
cv2.imshow('figure1', img0)

for col in ['Blue', "Green", 'Red']:
    cv2.namedWindow(col, 0)
    cv2.resizeWindow(col, 960, 480)
b, g, r = cv2.split(img)

cv2.imwrite('Blue.jpg', b)
cv2.imwrite('Red.jpg', r)
cv2.imwrite('Green.jpg', g)

cv2.imwrite('Blue.jpg', b)
cv2.imwrite('Red.jpg', r)
cv2.imwrite('Green.jpg', g)
cv2.destroyAllWindows()

输出
red
[外链图片转存失败(img-z4usJf6y-1566195066221)(Red.jpg)]
blue
[外链图片转存失败(img-SibsiD1M-1566195066221)(Blue.jpg)]
Green[外链图片转存失败(img-utLhBZjD-1566195066223)(Green.jpg)]

直方图显示

函数

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) 第一个参数必须用方括号括起来。 第二个参数是用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道; 第三个参数是Mask,这里没有使用,所以用None。 第四个参数是histSize,表示这个直方图分成多少份(即多少个直方柱)。第二个例子将绘出直方图,到时候会清楚一点。 第五个参数是表示直方图中各个像素的值,[0.0, 256.0]表示直方图能表示像素值从0.0到256的像素。

代码实现

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('p1.jpg')
img0 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imwrite('p2.jpg', img0)

cv2.namedWindow('figure1', 0)
cv2.resizeWindow('figure1', 960, 480)
cv2.imshow('figure1', img0)

for col in ['Blue', "Green", 'Red']:
    cv2.namedWindow(col, 0)
    cv2.resizeWindow(col, 960, 480)
b, g, r = cv2.split(img)

cv2.imwrite('Blue.jpg', b)
cv2.imwrite('Red.jpg', r)
cv2.imwrite('Green.jpg', g)

r = cv2.imshow("Red", r)
g = cv2.imshow("Green", g)
b = cv2.imshow("Blue", b)
cv2.destroyAllWindows()
color = ['b', 'g', 'r']
for i, col in enumerate(color):
    histr = cv2.calcHist([img], [i], None, [256], [0, 256])
    plt.plot(histr, color=col)
    plt.xlim(0, 256)
    plt.ylim(0, 700000)
    plt.show()

histr = cv2.calcHist([img0], [0], None, [256], [0, 256])
plt.plot(histr, color=col)
plt.xlim(0, 256)
plt.ylim(0, 700000)
plt.show()

输出
[外链图片转存失败(img-jeHMeEBa-1566195066224)(p3.png)][外链图片转存失败(img-Y3PvufOY-1566195066225)(p4.png)][外链图片转存失败(img-dXP9cVgU-1566195066226)(p5.png)]
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gowi_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值