当前位置:   article > 正文

图像识别基础代码汇总(python+opencv)_图像识别代码

图像识别代码

为了方便复制粘贴,汇总一下基础图像处理代码(如有遗漏欢迎指出,后续再添加修改)没有原理讲解,我也是个小白,方便日后写代码直接复制使用做的笔记

目录

一、导入需要用的设置

二、读入、显示、储存、退出图片

1、读入图片

2、图像显示

3、保持图片

4、退出

5、删除窗口

二、获得图像信息

1、图像形状、像素、类型

2、图像RGB值

三、修改图像信息

1、修改像素

2、缩放 resize()

3、旋转 getRotationMatrix2D(), warpAffine()

4、翻转 flip()

5、平移 warpAffine()

三、图像阈值化 threshold()

1、二进制阈值化 cv2.THRESH_BINARY

2、反二进制阈值化 cv2.THRESH_BINARY_INV

3、截断阈值化 cv2.THRESH_TRUNC

4、阈值化为0 cv2.THRESH_TOZERO

5、反阈值化为0 cv2.THRESH_TOZERO_INV 

四、图像滤波

1、均值滤波 cv2.blur(src, ksize)

2、中值滤波 cv2.medianBlur(src, ksize)

3、高斯滤波 cv2.GaussianBlur(src, ksize, sigmaX)

五、形态学处理

1、腐蚀 cv2.erode(src, kernel, iterations)

2、膨胀 cv2.dilate(src, kernel, iterations)

3、开运算 cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

4、闭运算 cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

5、顶帽运算

6、黑帽运算

六、直方图均值化 equalizeHist()

七、频域滤波

1、高通滤波

2、低通滤波

八、图像梯度

1、sobel算子

2、scharr算子

3、laplacian算子

九、边缘检测 canny

十、图像金字塔

1、向下采样

2、向上采样


一、导入需要用的设置

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import cv2

二、读入、显示、储存、退出图片

1、读入图片

img = cv2.imread("图像路径")
  • 读取原图:cv.IMREAD_UNCHANGED
  • 读取原图的灰度图:cv.IMREAD_GRAYSCALE
  • 读取原图的彩图:cv.IMREAD_COLOR

2、图像显示

cv2.imshow("指定显示图片名称",读取的图片对象)

3、保持图片

cv2.imwrite(‘保存路径',读取的图片对象)

4、退出

cv2.waitKey(delay)
  • delay > 0 - 等待 delay 毫秒
  • delay < 0 - 等待键盘单击
  • delay = 0 - 无限等待
  • delay = null - 等待键盘单击

5、删除窗口

cv2.destroyAllWindows()

二、获得图像信息

  1. g = cv2.imread(r"路径",图像名称) # 灰度图像,单通道
  2. i = cv2.imread(r"路径",图像名称) # BGR图像,三通道

1、图像形状、像素、类型

  1. print(g.shape)
  2. print(i.shape)
  3. print(g.size)
  4. print(i.size)
  5. print(g.dtype)
  6. print(i.dtype)

2、图像RGB值

px = image[水平方向像素, 竖直方向像素]
  1. print("R:", image[水平像素, 竖直像素 -1])
  2. print("G:", image[水平像素, 竖直像素, 1])
  3. print("B:", image[水平像素, 竖直像素, 0])

R通道,G通道,B通道、红绿蓝三种不同的颜色通道

三、修改图像信息

1、修改像素

image[像素横坐标, 像素纵坐标] = [255, 255, 255]

2、缩放 resize()

  1. result = cv2.resize(src, (160,160))
  2. result = cv2.resize(src, (int(cols * 0.6), int(rows * 1.2)))
  3. result = cv2.resize(src, None, fx=0.5, fy=0.5)

src 表示原始图像;

dsize 表示缩放大小;

fx和fy 也可以表示缩放大小倍数,他们两个(dsize或fx/fy)设置一个即可实现图像缩放

3、旋转 getRotationMatrix2D(), warpAffine()

  1. M = cv2.getRotationMatrix2D((cols/2, rows/2), 30, 1)
  2. #参数分别为:旋转中心、旋转度数、scale缩放比例
  3. rotated = cv2.warpAffine(src, M, (cols, rows))
  4. #参数分别为:原始图像、旋转参数 和 原始图像宽高

4、翻转 flip()

dst = cv2.flip(src, flipCode)

src 表示原始图像

flipCode 表示翻转方向

5、平移 warpAffine()

  1. M = np.float32([[1, 0, x], [0, 1, y]])
  2. shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

三、图像阈值化 threshold()

1、二进制阈值化 cv2.THRESH_BINARY

ret,thresh1=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY)

像素灰度值>thresh,设为最大灰度值

像素灰度值<thresh,设为0

2、反二进制阈值化 cv2.THRESH_BINARY_INV

ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV)

与二进制阈值化相反,>thresh,设为0

                                   <thresh,设为255

3、截断阈值化 cv2.THRESH_TRUNC

ret,thresh3=cv2.threshold(GrayImage,127,255,cv2.THRESH_TRUNC)

像素灰度值>thresh,设为thresh

像素灰度值<thresh,不变

4、阈值化为0 cv2.THRESH_TOZERO

ret,thresh4=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO)

>thresh,不变

<thresh,设为0

5、反阈值化为0 cv2.THRESH_TOZERO_INV 

ret,thresh5=cv2.threshold(GrayImage,127,255,cv2.THRESH_TOZERO_INV)

与阈值化为0正相反, >thresh,设为0

                                    <thresh,不变

四、图像滤波

1、均值滤波 cv2.blur(src, ksize)

result = cv2.blur(src, ksize)
  • 随着核大小逐渐变大,会让图像变得更加模糊
  • 如果设置为核大小为(1,1),则结果就是原始图像。

2、中值滤波 cv2.medianBlur(src, ksize)

result = cv2.medianBlur(src, ksize) 
  • 随着核大小逐渐变大,会让图像变得更加模糊;
  • 核必须是大于1的奇数,如3、5、7等;
  • 在代码 dst = cv2.medianBlur(src, ksize) 中 填写核大小时,只需填写一个数即可,如3、5、7等,对比均值滤波函数用法。

3、高斯滤波 cv2.GaussianBlur(src, ksize, sigmaX)

result = cv2.GaussianBlur(source, (3, 3), 0)

五、形态学处理

设置卷积核

用numpy生成

kernel = np.ones((3,3), np.uint8)

用opencv自带函数--getStructuringElement

  1. element = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) #十字型
  2. element = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) #矩形
  3. element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) #椭圆形

1、腐蚀 cv2.erode(src, kernel, iterations)

fushi = cv2.erode(src, kernel)

2、膨胀 cv2.dilate(src, kernel, iterations)

pengzhang = cv2.dilate(src, kernel)

3、开运算 cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

kai = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

4、闭运算 cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

bi = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

5、顶帽运算

tophat = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

6、黑帽运算

blackhat = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

六、直方图均值化 equalizeHist()

dst=cv2.equalizeHist(src)
  • dst 表示处理结果
  • src 表示原始图像

七、频域滤波

  • numpy.fft.ifft2(): 实现逆傅里叶变换,返回一个复数数组
  • numpy.fft.ifftshift() :fftshift的逆函数,将低频信息由中心移到左上角
  • iimg = np.abs(逆傅里叶变换的结果) : 将逆傅里叶变换的结果不能直接显示为图像,需要变为灰度值,显示为图像

1、高通滤波

(1)numpy

  1. f = np.fft.fft2(img) #傅里叶变换
  2. fshift = np.fft.fftshift(f) #将低频移到中心
  3. rows,cols = int(rows/2), int(cols/2) #获取图像中心点
  4. fshift[crow-30:crow+30, col-30:col+30] = 0 #将中心点周围30区域置为0,即将低频信息去掉,实现高通
  5. #滤波
  6. ishift = np.fft.ifftshift(fshift) #将低频移还原到左上角
  7. iimg = np.fft.ifft2(ishift) #逆傅里叶变换
  8. iimg = np.abs(iimg) #将逆傅里叶变换的结果转换为灰度值,显示为图像

(2)opencv cv2.dft()

  1. dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) #傅里叶变换
  2. dftShift = np.fft.fftshift(dft) #低频移到中心位置
  3. result = 20*np.log(cv2.magnitude(dftShift[:,:,0], dftShift[:,:,1])) #转换为灰度值,显示

2、低通滤波

  1. o = cv2.dft(np.float32(o), flags=cv2.DFT_COMPLEX_OUTPUT) #傅里叶变换
  2. dshift = np.fft.fftshift(dft) #将低频移到中间
  3. rs,cs = o.shape #获取图像大小
  4. cr,cc = int(rs/2), int(cs/2) #图像中心
  5. mask=np.zeros((rs,cs,2),np.int8) #构造掩摸图像,两个通道
  6. mask[cr-30:cr+30, cc-30:cc+30] = 1
  7. md = dshift*mask #消除高频,留着中间部分的低频部分
  8. imd = np.fft.ifftshift(md) #将低频还原到左上角
  9. io = cv2.idft(imd) #逆傅里叶变换
  10. io = cv2.magnitude(io[:,:,0], io[:,:,1]) #转换为灰度值,才能显示为图像

八、图像梯度

1、sobel算子

dst = cv2.Sobel(src, ddepth, dx, dy,  [ksize])

2、scharr算子

  1. dst = Scharr(src, cv2.CV_64F, dx, dy)
  2. dst = cv2.convertScaleAbs(dst)

3、laplacian算子

  1. laplacian = cv2.Laplacian(src, ddepth)
  2. laplacian = cv2.convertScaleAbs(laplacian)

九、边缘检测 canny

edges =  cv2.Canny(image, threshold1, threshold2)
  • image: 原始图像
  • threshold1: 阈值1 minVal
  • threshold2: 阈值2  maxVal
  •  threshold值越小,细节越丰富

十、图像金字塔

1、向下采样

  1. r1 = cv2.pyrDown(原图)
  2. r2 = cv2.pyrDown(r1)
  3. r3 = cv2.pyrDown(r2)

2、向上采样

  1. r1 = cv2.pyrUp(原图)
  2. r2 = cv2.pyrUp(r1)
  3. r3 = cv2.pyrUp(r2)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/611192
推荐阅读
相关标签
  

闽ICP备14008679号