我是靠谱客的博主 乐观钢铁侠,最近开发中收集的这篇文章主要介绍树莓派学习(四):树莓派上Python写OpenCV——对图像的色彩操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

我使用的是树莓派自带的python IDE
在这里插入图片描述

怎么理解我的注释:

形如 某某某:X1,X2,X3
等价于 函数功能:参数1的解释,参数2,参数3…

1.图像的读取,显示,保存

注:图片请自备

代码:

#image read,display and save
import cv2
im=cv2.imread("doge.jpeg",1)#路径,1彩色图像/0灰度图像
print(type(im))#查看im变量类型
print(im.shape)#打印图像数据的形状

cv2.imshow("image",im)#显示图像:窗口名称,变量
cv2.imwrite("1.jpg",im)#保存图像
cv2.waitKey()#阻塞,等待用户随意按键
cv2.destroyAllWindows()#结束所有打开窗口

运行效果:
在这里插入图片描述
在这里插入图片描述

2.彩色图像转灰度

代码:

#color2gray
import cv2

im = cv2.imread("doge.jpeg",1)#读取彩色图像


#.cvtColor:转换灰度图像
im_gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)#COLOR_BGR2GRAY:B=blue,G=green,R=red,使用蓝色作为灰度的第一个通道

cv2.imshow("im_gray",im_gray)#显示
cv2.waitKey()#阻塞,等待用户随意按键
cv2.destroyAllWindows()#结束所有打开窗口

结果:
在这里插入图片描述

3.图像的通道操作

基础知识:

im=cv2.imread("doge.jepg",1)
print(type(im))#查看im变量类型

使用上述代码导入一张图片,并打印出im变量的类型
在这里插入图片描述
查看图片属性,得到图片为500*300像素
在这里插入图片描述
不难推测出,
数组的第一个维度表示图片宽度:width
第二个维度表示长度:length
第三个自然是:RGB了

原图:
在这里插入图片描述

(1)单通道操作

#channel_operate
import cv2

im = cv2.imread("color.jpg",1)#读取彩色图像

#取出蓝色通道,并显示
b=im[:,:,0] #0代表蓝色通道,1绿色,2红色
cv2.imshow("im1",b)

cv2.waitKey()#阻塞,等待用户随意按键
cv2.destroyAllWindows()#结束所有打开窗口

效果
在这里插入图片描述

解释

因为我只抽取了一个蓝色通道出来,系统会把单通道图像当作灰度图显示,
且蓝色通道的值均为255,转化为灰度图则为白色

(2)抹掉某一通道

#抹掉蓝色通道
im[:,:,0]=0
cv2.imshow("im_b0",im)

在这里插入图片描述

4.直方图均衡化处理

原图

在这里插入图片描述

#eual_hist 直方图均衡化处理
import cv2
import numpy as np
from matplotlib import pyplot as plt

im = cv2.imread("equal_hist.jpg",0)#读取灰度图像

im_equal=cv2.equalizeHist(im)
cv2.imshow("im_equal",im_equal)

#绘制灰度直方图
#原始图像
plt.subplot(2,1,1)
plt.hist(im.ravel()
         ,256,[0,256],label="orig")
#均衡后
plt.subplot(2,1,2)
plt.hist(im_equal.ravel()
         ,256,[0,256],label="equalized")

plt.show()

cv2.waitKey()#阻塞,等待用户随意按键
cv2.destroyAllWindows()#结束所有打开窗口

在这里插入图片描述
在这里插入图片描述

5.彩色直方图均衡化

# colorimg_hist_equal
# 彩色图像直方图均衡化处理
import cv2

im = cv2.imread("sunrise.jpg")
cv2.imshow("im", im)

# BGR ==> YUV,BGR转YUV图像编码
yuv = cv2.cvtColor(im, cv2.COLOR_BGR2YUV)

# 取出亮度通道,进行均衡化处理,并将均衡化处理后的值赋值回原图像
yuv[..., 0] = cv2.equalizeHist(yuv[..., 0])

# YUV ==> BGR
equlized_color = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR)
cv2.imshow("equlized_color", equlized_color)

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

YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色,而色度又定义了颜色的两个方面:色调和饱和度。

其中:
Y 表示明亮度(Luminance、Luma)
U 和 V 表示色度(Chrominance、Chroma)(U,V 分别是蓝色通道和红色通道)
其中:
Y 通道数值越高,图片则越亮
U 通道数值越高,颜色就越接近蓝色
V 通道数值越高,颜色就越接近红色

在这里插入图片描述

6.图像二值化与反二值化

# 07_img_binary.py
# 图像二值化/反二值化处理
import cv2

im = cv2.imread("../data/lena.jpg", 0) # 读取灰度图像
cv2.imshow("im", im)

# 二值化
t, rst = cv2.threshold(im,
                       80, # 阈值
                       255, # 最大值
                       cv2.THRESH_BINARY) # 二值化
cv2.imshow("bin", rst)

# 反二值化
t, rst2 = cv2.threshold(im,
                       80, # 阈值
                       255, # 最大值
                       cv2.THRESH_BINARY_INV) # 反二值化
cv2.imshow("bin_inv", rst2)

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

所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。

在这里插入图片描述

以上,摘录自

2021最全OpenCV图像处理 人工智能视频精选

最后

以上就是乐观钢铁侠为你收集整理的树莓派学习(四):树莓派上Python写OpenCV——对图像的色彩操作的全部内容,希望文章能够帮你解决树莓派学习(四):树莓派上Python写OpenCV——对图像的色彩操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部