一、将图像分为RGB三个通道的图像,转换为灰度图,并画出直方图
1.首先要学会如何读取并展示出一张图片:
# -*- coding: cp936 -*-
# 防止中文出错
import cv2 #引入OpenCV库
img=cv2.imread('D:/Camera Roll/aling.jpg',1)
# 括号左边填入你所选照片的地址(如果照片和py文件在一个文档里面可以直接输入照片名字),括号右边默认为1彩色图片,当填入0时读取的是灰色图片
cv2.namedWindow('img') #取一个窗口的名字
cv2.imshow('img',img) #展示图片
cv2.waitKey(0) #使图片停留在屏幕上,不至于很快闪退
cv2.destroyAllWindows() #关闭所有窗口
运行结果为:
2.进行RGB三通道输出、灰度图以及直方图
import cv2
import numpy as np #用np代替引入的numpy
from matplotlib import pyplot as plt
img=cv2.imread('D:/Camera Roll/aling.jpg')
b,g,r=cv2.split(img) #进行通道分离
pic=np.zeros(np.shape(img),np.uint8) #生成零矩阵
pic[:,:,0]=b
cv2.namedWindow('blue')
cv2.imshow('blue',pic)
cv2.waitKey(0)
pic=np.zeros(np.shape(img),np.uint8)
pic[:,:,1]=g
cv2.namedWindow('green')
cv2.imshow('green',pic)
cv2.waitKey(0)
pic=np.zeros(np.shape(img),np.uint8)
pic[:,:,2]=r
cv2.namedWindows('red')
cv2.imshow('red',pic)
cv2.waitKey(0)
color=("blue","green","red")
for i,color in enumerate(color): #用于遍历序列中的下标和元素
hist=cv2.calcHist([img],[i],None,[256],[0,256])
#建立直方图([图像],[通道],掩膜:一般不需要,设为None,[256],[0,256])
plt.plot(hist,color=color)
plt.xlim([0,256])
plt.show()
img=cv2.imread('D:/Camera Roll/aling.jpg',0) #读取图片为灰度图
cv2.namedWindow('gray')
cv2.imshow('gray',img)
cv2.waitKey(0)
plt.hist(img.ravel(),256,[0,256])
plt.show()
cv2.destoryAllWindows()
运行结果:
二、运用数学函数对灰色图进行灰度转换
用一个y=-x+255,把黑的变成白的,把白的变成黑的
import cv2
import numpy as np
img=cv2.imread('D:/Camera Roll/wei.jpg',0)
# 获取图片的高度和宽度
height=img.shape[0]
width=img.shape[1]
# 建立一个零矩阵
result=np.zeros((height,width),np.uint8)
for i in range(height):
for j in range(width):
gray=255-img[i,j] # 运用一个 y=-x+255 的数学函数
result[i,j]=np.uint8(gray)
cv2.imshow('gray',img)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destoryAllWindows()
运行结果:
三、createTrackbar函数的简单使用
import cv2
def callback(x): #回调函数
pass
cv2.namedWindow('image')
img=cv2.imread('D:/Camera Roll/wifi.jpg')
# 建立一个滑块
cv2.createTrackbar('num','image',0,255,callback)
while(1):
num=cv2.getTrackbarPos("num","image") #获取当前滑块的位置
ret,img1=cv2.threshold(img,num,255,cv2.THRESH_BINARY)
cv2.imshow('image',img2)
k=cv2.waitKey(1) & 0xFF
if k==27:
break
cv2.destoryAllWindows()
# 该程序按Esc结束
运行结果:
不同的num值,图像颜色对比不一样。
本人是第一次接触图像处理,很多东西还不是很懂,以后会多多学习的,如有错误请看到的小伙伴多多提醒。
有冒犯之处,请多原谅。