概述
前言
我使用的是树莓派自带的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——对图像的色彩操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复