本次实验环境Python3
1.理解彩色图像的不同格式;
2.掌握彩色图像模型间的转化方法
3.掌握伪彩色图像增强及其实现方法
彩色图像处理:
可分为两类。(1)对3个平面分量单独处理,然后将分别处理过的三个分量合成彩色图像,对每个分量的处理技术可以应用到对灰度图像处理的技术上。(2)直接对彩色像素进行处理。因为全彩色图像至少有3个分量,彩色像素实际上是一个向量,直接处理就是同时对所有分量进行无差别的处理。
伪彩色图像增强处理:
将图像中的黑白灰度级变成不同的彩色,如果分层越多,人眼所能提取的信息也多,从而达到图像增强的效果。是一种视觉效果明显,又不太复杂的图像增强技术。伪彩色图像处理技术适用于航空摄影、遥感图片、X光片及云母的判读等处理。主要有密度分割法、灰度级-伪彩色变换法、频域伪彩色处理等多种方法。
实验内容或步骤:
对“lena.jpg”的彩色图像分离出R、G、B三个通道图像,分别求其补色,然后再合并为一张图像保存并显示;
思路:先将lena.jpg分离出R,G,B三个通道图像,将它们分别传入求补色的函数complementary_colour(img,img_split)经过处理后采用cv2.merge()进行合成,并用cv2.imwrite()进行保存
对“lena.jpg” 的彩色图像分离为H、S、V三个通道图像,分别采用平滑滤波处理,分别显示,且合并为一张图像保存;
思路:先用cvtColor()函数将lena图像转换为hsv类型的图像并用split()进行分离,然后用blur()函数做3x3或者5x5或者7x7的滤波处理,用merge()函数合并、imshow()显示、imwrite()保存。
对“gf3.jpg”灰度图像转成伪彩色图,并显示和保存。
思路:利用python自带的applyColorMap(img,3)函数进行伪彩色处理,数字(1-13)代表不同的伪彩色处理方法。处理完后用imshow()显示、imwrite()保存。
源码:
1.
import cv2
import numpy as np
def complementary_colour(img,img_split):#求补色的函数
h,w=img.shape[0],img.shape[1]
new_img=np.zeros((h,w),dtype=int)#构造一个和img大小相同的矩阵
for i in range(h):
for j in range(w):
b=int(img[i,j,0])
g=int(img[i,j,1])
r=int(img[i,j,2])
new_img[i][j]=max(r,g,b)+min(r,g,b)-int(img_split[i][j])#注意取整,否则可能溢出
new_img=cv2.convertScaleAbs(new_img)#转换为np.uint8
return new_img
def main():
img=cv2.imread(r'.\lena.jpg')
B,G,R=cv2.split(img)#分离
r = complementary_colour(img, R)
g = complementary_colour(img, G)
b = complementary_colour(img, B)
img_bu=cv2.merge([b,g,r])#合并
cv2.imshow("img_bu",img_bu)
cv2.imwrite(r'.\lena_bu.jpg',img_bu)#保存
cv2.waitKey()
if __name__=='__main__':
main()
2.
import cv2
import numpy as np
def main():
img = cv2.imread(r'.\lena.jpg')
img_HSV=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
v,s,h=cv2.split(img_HSV)
cv2.blur(v,(3,3))
cv2.blur(s,(3,3))
cv2.blur(h,(3,3))
cv2.imshow("v",v)
cv2.imshow("s",s)
cv2.imshow("h",h)
HSV_merge=cv2.merge([v,s,h])
cv2.imshow("HSV_merge",HSV_merge)
cv2.imwrite(r'.\HSV_merge.jpg')
cv2.waitKey()
if __name__=='__main__':
main()
3.
import cv2
import numpy as np
def main():
img=cv2.imread(r'.\gf3.jpg')
img_preudo=cv2.applyColorMap(img,3)
cv2.imshow("img_pseudo",img_preudo)
cv2.imwrite(r'.\gf3_preudo.jpg',img_preudo)
cv2.waitKey()
if __name__=='__main__':
main()