
图像基本处理
发布日期:2021-05-14 15:07:26
浏览次数:16
分类:精选文章
本文共 4427 字,大约阅读时间需要 14 分钟。
图像处理教程:OpenCV应用实例
1. 绘制基础元素
在OpenCV中绘制图像元素比较基础,但却是图像处理的基石。通过简单的绘制操作,我们可以快速构建功能图形。
- 线段绘制
import numpy as npimport cv2# 创建一张黑色背景img = np.zeros((512, 512, 3), np.uint8)cv2.line(img, (0, 0), (200, 500), (0, 0, 255), 5)cv2.namedWindow('example')cv2.imshow('example', img)cv2.waitKey(0)cv2.destroyAllWindows()
- 矩形绘制
import numpy as npimport cv2img = np.zeros((512, 512, 3), np.uint8)cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 255), 1)cv2.namedWindow('example')cv2.imshow('example', img)cv2.waitKey(0)cv2.destroyWindow('example')
- 圆绘制
import numpy as npimport cv2img = np.zeros((512, 512, 3), np.uint8)cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)cv2.namedWindow('example')cv2.imshow('example', img)cv2.waitKey(0)cv2.destroyAllWindows()
2. 滤镜应用
滤镜是在图像处理中常用工具,可以用来平滑、增强等处理图像效果。
- 方框滤波
import cv2img = cv2.imread('girl2.png', cv2.IMREAD_UNCHANGED)r = cv2.boxFilter(img, -1, (7, 7), normalize=1)d = cv2.boxFilter(img, -1, (3, 3), normalize=0)cv2.namedWindow('img', cv2.WINDOW_AUTOSIZE)cv2.namedWindow('r', cv2.WINDOW_AUTOSIZE)cv2.namedWindow('d', cv2.WINDOW_AUTOSIZE)cv2.imshow('img', img)cv2.imshow('r', r)cv2.imshow('d', d)cv2.waitKey(0)cv2.destroyAllWindows()
- 均值模糊
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('opencv.png')cv2.imshow('img', img)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)blur = cv2.blur(img, (3, 3))plt.subplot(121)plt.imshow(img)plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122)plt.imshow(blur)plt.title('Blurred')plt.xticks([]), plt.yticks([])plt.show()
3. 形态学操作
形态学操作是一系列的二维操作,常用于边缘检测、图像主题识别等领域。
- 腐蚀与膨胀
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('morphology.png')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)kernel = np.ones((3, 3), np.uint8)erosion = cv2.erode(img, kernel, iterations=1)plt.subplot(121)plt.imshow(img)plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122)plt.imshow(erosion)plt.title('Erosion')plt.xticks([]), plt.yticks([])plt.show()
- 开运算
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('open.png')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)plt.subplot(121)plt.imshow(img)plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122)plt.imshow(opening)plt.title('Opening')plt.xticks([]), plt.yticks([])plt.show()
4. 直方图均衡化
直方图均衡化是一种将图像的对比度增强的方法,常用于亮度补偿。
- 平滑直方图均衡化
import cv2img = cv2.imread('dark.png', 0)cv2.imshow('dark', img)img_equal = cv2.equalizeHist(img)cv2.imshow('img_equal', img_equal)cv2.waitKey(0)cv2.destroyAllWindows()
- 局部直方图均衡化
import cv2import numpy as npimg = cv2.imread('dark1.jpg', -1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2FIRST)clahe = cv2.createCLAHE(clipLimit=2, tileGridSize=(30, 30))cl1 = clahe.apply(img)cv2.imshow('src', img)cv2.imshow('dst', cl1)cv2.waitKey(0)cv2.destroyAllWindows()
5. 图像几何变换
几何变换包括平移、旋转、仿射变换等,常用于图像的位置调整与优化。
- 仿射变换
import cv2import numpy as npimport matplotlib.pyplot as pltsrc = cv2.imread('bird.png')rows, cols = src.shape[:2]pos1 = np.float32([[50, 50], [200, 50], [50, 200]])pos2 = np.float32([[10, 100], [200, 50], [100, 250]])M = cv2.getAffineTransform(pos1, pos2)result = cv2.warpAffine(src, M, (2*cols, 2*rows))cv2.imshow('original', src)cv2.imshow('result', result)cv2.waitKey(0)cv2.destroyAllWindows()
- 透视变换
import cv2import numpy as npimport matplotlib.pyplot as pltsrc = cv2.imread('bird.png', 1)rows, cols = src.shape[:2]points = np.float32([[114, 82], [287, 156], [8, 322], [216, 333]])points2 = np.float32([[0, 0], [188, 0], [0, 262], [188, 262]])M = cv2.getPerspectiveTransform(points, points2)result = cv2.warpPerspective(src, M, (cols, rows))cv2.imshow('original', src)cv2.imshow('result', result)cv2.waitKey(0)cv2.destroyAllWindows()
6. 图像纹理分析
通过技术手段提取图像中的纹理信息,用于目标识别等多个领域。
- Gamma校正
import cv2import numpy as npimg = cv2.imread('dark1.jpg')def adjust_gamma(image, gamma=1.0): invGamma = 1.0 / gamma table = [] for i in range(256): table.append(( (i / 255.0) ** invGamma ) * 255) table = np.array(table).astype('uint8') return cv2.LUT(image, table)img_gamma = adjust_gamma(img, 0.8)cv2.imshow('img', img)cv2.imshow('img_gamma', img_gamma)cv2.waitKey(0)cv2.destroyAllWindows()
以上就是OpenCV图像处理的实用案例,涵盖了基础操作与高级功能,适合学习者通过示例快速掌握图像处理技能。
发表评论
最新留言
很好
[***.229.124.182]2025年04月05日 18时06分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux 查看log日志相关命令
2019-03-11
IDEA 2019 安装 mybatis-plus插件
2019-03-11
div 实现光标悬停变成手型
2019-03-11
layer.confirm 无效
2019-03-11
Java 回调机制
2019-03-11
7、回归和特征选择
2019-03-11
pycharm使用(新建工程、字体修改、调试)
2019-03-11
什么是Numpy、Numpy教程
2019-03-11
Python学习笔记——元组
2019-03-11
异常声音检测
2019-03-11
PCB学习笔记——AD17如何添加新的封装
2019-03-11
numpy版本问题
2019-03-11
无法打开文件“opencv_world330d.lib”的解决办法
2019-03-11
maven项目通过Eclipse上传到svn上面,再导入到本地出现指定的类找不到的问题
2019-03-11
maven 项目部署到tomcat下 没有class文件
2019-03-11
算法训练 未名湖边的烦恼(递归,递推)
2019-03-11
算法训练 完数(循环,数学知识)
2019-03-11