赞
踩
#读取图片
img = cv2.imread("01.jpg") #读取的的时候,路径用到了两个斜杠,第一个斜杠表示转义字符
#显示图像
cv2.imshow("image", img) #窗口名,文件名
# 拆分通道 b, g, r = cv2.split(img) # 显示原始图像 cv2.imshow("B", b) cv2.imshow("G", g) cv2.imshow("R", r) #等待显示, 如果没有这句的话,图片就会显示一下立马消失 cv2.waitKey(0) #0表示无限制的等待(按任意键就退出),大于0(如5)表示等待5秒自动关闭窗口,小于零表示敲击键盘就会关闭 cv2.destroyAllWindows() #从内存将窗口清除 #保存图像 cv2.imwrite("D:\\lalala.jpg", img) #文件地址, 文件名
此时需添加等待显示:
# 方法一:按任意键直接销毁所有打开的HighGUI窗口
cv2.waitKey(0) # 等待用户输入,按任意键即可
cv2.destroyAllWindows()
方法一:Numpy加法运算,目标图像 = 图像1 + 图像2,运算结果进行取模运算。有以下两种情况:
#(1)当像素值 <= 255时,结果为“图像1+图像2”,例如:120+48=168
#(2)当像素值 > 255时,结果为对255取模的结果,例如:(255+64) % 255=64
result1 = img + test
方法二:OpenCV加法运算,目标图像 = cv2.add(图像1, 图像2) 。 此时结果是饱和运算,有以下两种情况:
#(1)当像素值 <= 255时,结果为“图像1+图像2”,例如:120+48=168
#(2)当像素值 > 255时,结果为255,例如:(255+64) = 255
result2 = cv2.add(img, test)
result3 = cv2.addWeighted(result1, 1,result2, 1, 0)
图像类型转换(灰度图) cvtColor()
#1) cv2.COLOR_BGR2GRAY 彩色转灰度 类似于Matlab 中的 rgb2gray()
#2) cv2.COLOR_BGR2RGB
#3) cv2.COLOR_GRAY2BGR
result4 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 图像类型转换(BRG通道转RGB通道)
result5 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
result6 = cv2.resize(img, (200,100))
print (result6.shape)
# 读取图片数据,# 图像缩放 dsize(列,行)
rows, cols, channel = img.shape
print(rows, cols)
result7 = cv2.resize(img, (int(cols * 0.6), int(rows * 1.2)))
# 图像缩放,(fx,fy) 缩放倍数的方法对图像进行放大或缩小。
result8 = cv2.resize(img, None, fx=0.3, fy=0.3)
#绕图像的中心旋转,参数:旋转中心 旋转度数 scale缩放比例
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 90, 1)
# 参数:原始图像 旋转参数 元素图像宽高
result9 = cv2.warpAffine(img, M, (cols, rows))
图像翻转,flip() 0以X轴为对称轴翻转 >0以Y轴为对称轴翻转 <0X轴Y轴翻转
img1 = cv2.flip(img, 0)
img2 = cv2.flip(img, 1)
img3 = cv2.flip(img, -1)
显示图形 (注意一个窗口多张图像的用法)
img1 = cv2.flip(img, 0)
img2 = cv2.flip(img, 1)
img3 = cv2.flip(img, -1)
# 显示图形 (注意一个窗口多张图像的用法)
titles = ['Source', 'Image1', 'Image2', 'Image3']
images = [img, img1, img2, img3]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
图像平移首先定义平移矩阵M,再调用 warpAffine() 函数实现平移
图像平移 下、上、右、左平移
M1 = np.float32([[1, 0, 0], [0, 1, 100]])
img4 = cv2.warpAffine(img, M1, (img.shape[1], img.shape[0]))
M2 = np.float32([[1, 0, 0], [0, 1, -100]])
img5 = cv2.warpAffine(img, M1, (img.shape[1], img.shape[0]))
M3 = np.float32([[1, 0, 100], [0, 1, 0]])
img6 = cv2.warpAffine(img, M1, (img.shape[1], img.shape[0]))
M4 = np.float32([[1, 0, -100], [0, 1, 0]])
img7 = cv2.warpAffine(img, M1, (img.shape[1], img.shape[0]))
# 显示图形
titles = ['img4', 'img5', 'img6', 'img7']
ret,thresh1=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY) #二进制阈值化
ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV) #反二进制阈值化
ret,thresh3=cv2.threshold(GrayImage,127,255,cv2.THRESH_TRUNC) #截断阈值化
ret,thresh4=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO) #阈值化为0
ret,thresh5=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO_INV) #反阈值化为0
# 高斯滤波
result = cv2.GaussianBlur(source, (3, 3), 0) #可以更改核大小,核越大可能越不清晰
#腐蚀 cv2.erode(src, kernel, iterations) iterations表示腐蚀几次
#取结构元所指定的领域内值的最小值作为该位置的输出灰度值。取每个位置领域内最小值,腐蚀后输出图像的总体亮度的平均值比起原图会有所降低,图像中比较亮的区域的面积会变小甚至消失,而较暗物体的尺寸会扩大。
fushi = cv2.erode(src, kernel)
#膨胀 cv2.dilate(src, kernel, iterations)
#取每个位置领域内最大值,膨胀后输出图像的总体亮度的平均值比起原图会有所升高,图像中比较亮的区域的面积会变大,而较暗物体的尺寸会减小甚至消失。
pengzhang = cv2.dilate(src, kernel)
#开运算 cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel) 先腐蚀再膨胀,平滑物体的轮廓、断开较窄的狭颈并消除细的突出物。
#闭运算 cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel) 先膨胀再腐蚀,平滑轮廓的一部分。弥合较窄的间断和细长的沟壑,消除小的孔洞,填补轮廓线中的断裂。
kai = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
bi = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
顶帽运算 原始减去开运算
黑帽运算 闭运算减去原始
tophat = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)
blackhat = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)
生成掩摸,提取感兴趣区,屏蔽作用,结构特征提取,特殊形状图像的制作。
mask = np.zeros(src.shape[:2],np.uint8)
mask[200:400, 200:400]=255
#灰度直方图 dst=cv2.equalizeHist(src):已知灰度概率密度分布的图像经过一种变换,使之演变为一幅具有均匀灰度概率密度分布的新图像。
#encoding:utf-8
#由原始图像的统计直方图计算归一化直方图和累计直方图,再将累计直方图进行区间转换以及将灰度级转换为256,至此转换完成,
#完成后的图像相似,但转换后的图像再更大区间上分布着,表明更加均衡
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('01.jpg', cv2.IMREAD_GRAYSCALE) # cv2.IMREAD_GRAYSCALE读取为灰度图像,其通道返回值为单个 img1 = cv2.imread('01.jpg') b,g,r = cv2.split(img1) #通道分割 img_RGB=cv2.merge([r,g,b])#通道组合 #img_RGB = cv2.imread('01.jpg',cv2.COLOR_BGR2RGB ) # ???????? 读取图像为rgb格式--无 equ = cv2.equalizeHist(img) #cv2.imshow("src", img) #cv2.imshow("result", equ) plt.hist(img.ravel(), 256) #plt.figure() plt.hist(equ.ravel(), 256) plt.subplot(221),plt.imshow(img_RGB, 'gray'),plt.title('img_rgb'), plt.xticks([]),plt.yticks([]) plt.subplot(222),plt.imshow(equ, 'gray'),plt.title('equ'), plt.xticks([]),plt.yticks([]) plt.subplot(223),plt.hist(img.ravel(),256),plt.title('img_hist') plt.subplot(224),plt.hist(equ.ravel(),256),plt.title('equ_hist') plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
#时域转化为频域
傅里叶得到低频、高频信息,针对低频、高频能够实现不同的目的
#(2)傅里叶过程是可逆的,图像经过傅里叶变换、逆傅里叶变换,能够恢复到原始图像
#(3)在频域对图像进行处理,在频域的处理会反应在逆变换图像上
#高通滤波:傅里叶变换为复数数组–将低频分量移到中心–获取中心点–设置低频区域并过滤–将低频转换至左上角–逆傅里叶==逆傅里叶变换结果转换为灰度值
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('01.jpg', 0) f = np.fft.fft2(img) #实现傅里叶变换,返回一个复数数组 fshift = np.fft.fftshift(f) #将低频分量移到频谱中心(傅里叶变换后的低频是在频谱左上角,为了观看方便,移到中心) result = 20*np.log(np.abs(fshift))#将复数转换为灰度值[0-255]范围 rows, cols = img.shape[0:2] #获取图像中心点 rows,cols = int(rows/2), int(cols/2) #获取图像中心点 fshift[rows-30:rows+30, cols-30:cols+30] = 0 #将中心点周围30区域置为0,即将低频信息去掉,实现高通滤波 ishift = np.fft.ifftshift(fshift) #将低频移还原到左上角 iimg = np.fft.ifft2(ishift) #逆傅里叶变换 iimg = np.abs(iimg) #将逆傅里叶变换的结果转换为灰度值,显示为图像 plt.subplot(221),plt.imshow(img, cmap = 'gray'),plt.title('original'),plt.axis('off') plt.subplot(222),plt.imshow(result, cmap = 'gray'),plt.title('result'),plt.axis('off') plt.subplot(223), plt.imshow(iimg, cmap='gray'),plt.title('iimg'),plt.axis('off') plt.show() cv2.waitKey(0) cv2.destroyAllWindows()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。