记录一下入门过程
python读取一个文件夹下的全部图片
import cv2
import os
def read(name):
for filename in os.listdir(name):
print(filename)
img=cv2.imread(name+"/"+filename)
cv2.imshow(filename,img)
cv2.waitKey(0)
read('D:\KB180053')
用鼠标获取roi区域
import cv2
img=cv2.imread('D:/lena.jpg') #读取图片
ROI=cv2.selectROI(windowName='roi',img=img,showCrosshair=True,fromCenter=False) #selectROI区域函数(窗口名字,img,是否在矩形中心划线,是否从中心开始画)
x,y,w,h=ROI #设置参数 x为最小x,y为最大y,wh分别为宽,高
cv2.rectangle(img,(x,y),(x+w,y-h),(255,0,0),2) #画矩形函数(img,左上顶点坐标,右下顶点坐标)
cv2.imshow('roi',img)
cv2.waitKey(0) #等待窗口
cv2.destroyWindow()
图片颜色反转 即用255-各个通道的值
import cv2
import numpy as np
img=cv2.imread('D:/lena.jpg')
print(img.shape) #尺寸为512,512,3
cv2.imshow('img原',img)
dst=255-img #三个通道操作是一样的,可以直接这样
cv2.imshow('img后',dst)
cv2.waitKey(0)
绘制灰度直方图
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('D:/lena.jpg',cv2.IMREAD_GRAYSCALE) #后面的那个表示读入的是灰度图片
hist=cv2.calcHist(img,[0],None,[256],[0,255],None,None)
'''
生成直方图
图像;指定通道,要有中括号,灰度图为0,彩色图用1、2、3;掩模图像,整张图像为none;histsize:bins数量;range:像素返回范围;累计标识
'''
print(hist.size) #size是所有元素总和,shape是尺寸
print(hist.shape)
plt.plot(hist,color='r') #绘图
plt.show()
彩色直方图
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('D:/lena.jpg') #后面的那个表示读入的是灰度图片
histr=cv2.calcHist(img,[1],None,[256],[0,255],None,None)
histg=cv2.calcHist(img,[2],None,[256],[0,255],None,None)
histb=cv2.calcHist(img,[3],None,[256],[0,255],None,None)
'''
生成直方图
图像;指定通道,要有中括号,灰度图为0,彩色图用1、2、3;掩模图像,整张图像为none;histsize:bins数量;range:像素返回范围;累计标识
'''
plt.plot(histr,color='r') #绘图
plt.plot(histb,color='r')
plt.plot(histg,color='r')
plt.show()
直方图均衡化
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('D:/lena.jpg',cv2.IMREAD_GRAYSCALE) #后面的那个表示读入的是灰度图片
equ=cv2.equalizeHist(img)
plt.subplot(121)
plt.imshow(equ,plt.cm.gray) #显示灰度图
plt.axis('off') #关闭坐标刻度,维度
plt.subplot(122) #分栏函数,一行两列,当前第二个
plt.hist(equ.ravel(),256)
'''
plt.hist绘制直方图, ravel:将对维数组降成一维数组
像素级:一般256
'''
plt.show()
均值滤波(低通滤波,线性滤波器)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('D:/lena.jpg')
blur=cv2.blur(img,(5,5)) #后面是核大小
cv2.imshow('yuan',img)
cv2.waitKey(0)
cv2.imshow('结果',blur)
cv2.waitKey(0)
高斯滤波
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('D:/lena.jpg')
blur=cv2.GaussianBlur(img,(5,5),0)
'''
img=img;高斯核,必须是正数与奇数;sigmax:x方向上的高斯核标准偏差
'''
cv2.imshow('yuan',img)
cv2.imshow('结果',blur)
cv2.waitKey(0)
#cv2.destroyWindow()
非线性滤波(中值滤波)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('D:/lena.jpg')
blur=cv2.medianBlur(img,5,None) #卷积核,写5,不写(5,5)
cv2.imshow('yuan',img)
cv2.imshow('jieguo',blur)
cv2.waitKey(0)