文章目录
-
-
-
-
- 需要引用的库
- 灰度图
-
-
- 屏幕分辨率
- 图像分辨率
-
- 参数1:图片的文件名
- 参数2:读入方式,省略即采用默认值
- 1.通道交换
- 2.灰度化(Grayscale)
- 二值化
- 4. 大津二值化算法(Otsu’s Method)
- 5. HSV变换
- 6. 减色处理
- 7. 平均池化(Average Pooling)
- 8. 最大池化(Max Pooling)
- 9. 高斯滤波(Gaussian Filter)
- 10 中值滤波
- 11. 均值滤波器
- 12. Motion Filter
- 13. MAX-MIN滤波器
- 14. 差分滤波器(Differential Filter)
- 16. Prewitt滤波器
- 19. Log滤波器
- 21. 直方图均衡化
- 22. 伽马校正
- 23. 常见的插值方法
- 阈值分割
- 固定阈值分割
- 自适应阈值
- Otsu阈值
- 小结
- 图像几何变换
- 缩放图片
- 翻转图片
- 平移图片
- 绘图功能
- 添加文字
-
需要引用的库
灰度图
Gray Scale Image 或是Grey Scale Image,又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。
用灰度表示的图像称作灰度图。除了常见的卫星图像、航空照片外,许多地球物理观测数据也以灰度表示。
分辨率=画面水平方向的像素值 * 画面垂直方向的像素值
屏幕分辨率
例如,屏幕分辨率是1024×768,也就是说设备屏幕的水平方向上有1024个像素点,垂直方向上有768个像素点。像素的大小是没有固定长度的,不同设备上一个单位像素色块的大小是不一样的。
例如,尺寸面积大小相同的两块屏幕,分辨率大小可以是不一样的,分辨率高的屏幕上面像素点(色块)就多,所以屏幕内可以展示的画面就更细致,单个色块面积更小。而分辨率低的屏幕上像素点(色块)更少,单个像素面积更大,可以显示的画面就没那么细致。
图像分辨率
例如,一张图片分辨率是500×200,也就是说这张图片在屏幕上按1:1放大时,水平方向有500个像素点(色块),垂直方向有200个像素点(色块)。
在同一台设备上,图片分辨率越高,这张图片1:1放大时,图片面积越大;图片分辨率越低,这张图片1:1缩放时,图片面积越小。(可以理解为图片的像素点和屏幕的像素点是一个一个对应的)。
但是,在屏幕上把图片超过100%放大时,为什么图片上像素色块也变的越大,其实是设备通过算法对图像进行了像素补足,我们把图片放的很大后看到的一块一块的方格子,虽然理解为一个图像像素,但是其实是已经补充了很多个屏幕像素;同理,把图片小于100%缩小时,也是通过算法将图片像素进行减少。
使用OpenCV加载并保存图片
加载图片,显示图片,保存图片
OpenCV函数:cv2.imread(), cv2.imshow(), cv2.imwrite()
加载图片
使用cv2.imread()来读入一张图片:
参数1:图片的文件名
如果图片放在当前文件夹下,直接写文件名就行了,如’lena.jpg’
否则需要给出绝对路径,如’D:OpenCVSampleslena.jpg’
参数2:读入方式,省略即采用默认值
二值化
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
4. 大津二值化算法(Otsu’s Method)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
5. HSV变换
5. HSV变换
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
进行色相反转
img[:, :, 0] = (img[:, :, 0] + 180) % 360
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
6. 减色处理
img = img // 64 * 64 + 32
7. 平均池化(Average Pooling)
img = skimage.measure.block_reduce(img, (8, 8, 1), np.mean)
8. 最大池化(Max Pooling)
img = skimage.measure.block_reduce(img, (8, 8, 1), np.max)
9. 高斯滤波(Gaussian Filter)
img = cv2.GaussianBlur(img, (3, 3), 1.3)
10 中值滤波
img = cv2.medianBlur(img, 3)
11. 均值滤波器
img = cv2.blur(img, (3, 3))
12. Motion Filter
生成一个对角线方向的卷积核(kernel)
kernel = np.diag([1]*3) / 3
img = cv2.filter2D(img, -1, kernel)
13. MAX-MIN滤波器
MAX-MIN滤波器使用 格内像素的最大值和最小值的差值对 格内像素重新赋值。通常用于边缘检测。
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((3,3))
img_max = cv2.dilate(img, kernel)
img_min = cv2.erode(img, kernel)
img = img_max – img_min
14. 差分滤波器(Differential Filter)
差分滤波器对图像亮度急剧变化的边缘有提取效果,可以获得邻接像素的差值。
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel_y = np.array([[0, -1, 0],[0, 1, 0],[0, 0, 0]])
img_y = cv2.filter2D(img, -1, kernel)
kernel_x = np.array([[0, 0, 0],[-1, 1, -0],[0, 0, 0]])
img_x = cv2.filter2D(img, -1, kernel)
15. Sobel滤波器
Sobel滤波器可以提取特定方向(纵向或横向)的边缘。sobel滤波器可以参考OpenCV: Image Filtering。滤波器按下式定义:
纵向:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_x = cv2.Sobel(img, cv2.CV_64F, 1, 0)
img_y = cv2.Sobel(img, cv2.CV_64F, 0, 1)
16. Prewitt滤波器
Prewitt滤波器是用于边缘检测的一种滤波器,其函数可以参考https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.prewitt.html
纵向:
- Laplacian滤波器
Laplacian滤波器是对图像亮度进行二次微分从而检测边缘的滤波器。https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#gad78703e4c8fe703d479c1860d76429e6
纵向:
- Emboss滤波器
Emboss滤波器可以使物体轮廓更加清晰
19. Log滤波器
LoG即高斯-拉普拉斯(Laplacian of Gaussian)的缩写,使用高斯滤波器使图像平滑化之后再使用拉普拉斯滤波器使图像的轮廓更加清晰。其函数可以参考https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.gaussian_laplace.html
- 直方图绘制
21. 直方图均衡化
直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布。其参考https://stackoverflow.com/questions/31998428/opencv-python-equalizehist-colored-image
22. 伽马校正
23. 常见的插值方法
RGB或BGR到灰度(COLOR_RGB2GRAY,COLOR_BGR2GRAY)
RGB或BGR到YcrCb(或YCC)(COLOR_RGB2YCrCb,COLOR_BGR2YCrCb)
RGB或BGR到HSV(COLOR_RGB2HSV,COLOR_BGR2HSV)
RGB或BGR到Luv(COLOR_RGB2Luv,COLOR_BGR2Luv)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!