基于python的opencv图像预处理(一)

本文详细介绍了基于Python的OpenCV进行图像预处理的基本操作,包括图像的读取、显示、保存,以及图像属性如形状、大小和数据类型的获取。此外,还讲解了如何定义和使用ROI(感兴趣区域)。通过实例代码展示了如何应用这些操作,并提供了相应的图像处理结果。文章适合初学者入门OpenCV图像处理。

opencv学习笔记🧭🏔🌋🛤🏞🏜

本文介绍基于python的opencv图像预处理基本操作,主要内容包括:

  • 图像读显存操作
  • 图像属性
  • 图像ROI

本环境为:Anaconda3-2020.11-Windows-x86_64+Python3.8+OpenCV4.0.1,打开Anaconda的Spyder

在这里插入图片描述

1. 图像读显存操作

图像读显存普遍存在接下来的操作,因此这就是我们图像处理的框架
在这里插入图片描述

1.1 读取图像

  • 从文件加载图像:
img = cv.imread(filename)

在这里插入图片描述

控制参数:
读取原图:cv.IMREAD_UNCHANGED
读取原图的灰度图:cv.IMREAD_GRAYSCALE
读取原图的彩图cv.IMREAD_COLOR

  • 举例
img=cv2.imread(“d:\\image.jpg”)

1.2 显示图像

  • 显示标签为Demo的img图像窗口
cv2.imshow("Demo",img)

在这里插入图片描述

  • 等待键盘指令退出
cv2.waitKey(0)

在这里插入图片描述

  • 删除所有窗口
cv2.destroyAllWindows()

在这里插入图片描述

1.3 保存图像

  • 将img保存到D盘命名为test.jpg的图片
cv2.imwrite(‘D:\\test.jpg',img)

在这里插入图片描述

1.4 完整的程序

在代码编辑区输入如下测试代码(需要有图片支撑,否则报错),也可以直接下载代码,在chapter2文件夹的2图像.py直接打开
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2# 导入cv2库
i=cv2.imread("../image/test.jpg")#读取../image/test.jpg相对路径赋值给变量i
cv2.imshow("Demo",i)#显示变量i图像
cv2.waitKey(0)#等待操作
cv2.destroyAllWindows()#关闭所有窗口
cv2.imwrite("../image/lesson1.png",i)#将变量i写入./image/lesson1.png,等同于复制图片为png格式

在这里插入图片描述
点击菜单栏绿色运行按钮或者“Run file(F5)”。然后回车关闭程序,该路径“…/image/”会新增“lesson1.png”

2. 图像属性

图像属性包含以下三个

• 1 形状:行、列、通道数
• 2 像素数目
• 3 图像的数据类型

2.1 shape函数

shape函数 可以获取图像的形状,返回包含行数,列数,通道数的元组。
在这里插入图片描述

灰度 返回行数,列数
彩色 返回行数,列数,通道数

2.2 size函数

size 可以获取图像的像素数目。
在这里插入图片描述

2.3 dtype函数

dtype 返回的是图像的数据类型。
在这里插入图片描述

2.4 完整的代码

在代码编辑区输入如下测试代码(需要有图片支撑,否则报错),也可以直接下载代码,在chapter3文件夹的3.4获取图像属性.py.直接打开

# -*- coding: utf-8 -*-

import cv2
a=cv2.imread("../image\lena256.bmp",cv2.IMREAD_UNCHANGED)#读取灰度图像lena256.bmp赋值给a
b=cv2.imread("../image\lenacolor.png",cv2.IMREAD_UNCHANGED)#读取彩图像lenacolor.png赋值给b
print(a.shape)
print(b.shape)#打印a/b形状
print(a.size)
print(b.size)#打印a/b大小
print(a.dtype)
print(b.dtype)#打印a/b类型

在这里插入图片描述
输出灰度图和彩图的相关属性

(256, 256)
(512, 512, 3)
65536
786432
uint8
uint8

3. 图像ROI

• ROI(region of interest),感兴趣区域。
• 从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域。
• 可以通过各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。
如下图Lena的面部就是我们关注的重点ROI
在这里插入图片描述
在代码编辑区输入如下测试代码(需要有图片支撑,否则报错),也可以直接下载代码,在chapter3文件夹的3.5感兴趣区域.py直接打开

# -*- coding: utf-8 -*-

import cv2#导入cv2库
import numpy as np#导入numpy库重命名为np
a=cv2.imread("../image\lenacolor.png")
girl=cv2.imread("../image\girl.bmp")#读取Lena和girl图像
b=np.ones((101,101,3))#三通道101x101的1区域
b=a[220:400,250:350]#Lena的[220:400,250:350]赋给b
girl[180:360,200:300]=b#b替代girl[180:360,200:300]区域
cv2.imshow("lenacolor",a)
cv2.imshow("original",girl)#显示Lena和girl图片

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:
在这里插入图片描述

4. 总结

  • 本文介绍本文介绍基于python的opencv图像预处理基本操作,主要内容包括图像读显存操作、 图像属性、图像ROI,很高兴能和大家分享!🤣🤣🤣希望你能有所收获。

  • 参考链接:

  • 参考代码

<think>好的,我现在需要处理用户关于使用PythonOpenCV进行图像预处理的请求。首先,用户明确想要教程和代码示例,所以我应该提供结构化的步骤,每个步骤包含解释和对应的代码片段。同时,用户提到之前的引用,虽然这些引用可能不完全相关,但需要从中提取有用的信息。 首先,回顾用户提供的引用。引用[3]和[4]提到了图像翻转、灰度转换和二值化,这些都属于预处理步骤。引用[2]中的图像分类示例涉及图像预处理如resize和归化。这些内容可以作为基础。 接下来,我需要确定常见的图像预处理步骤,并按逻辑顺序排列。通常预处理包括加载图像、调整大小、色彩空间转换、滤波去噪、二值化、形态学操作、边缘检测、直方图均衡化、归化等。用户可能希望覆盖这些主要步骤,每个步骤都有代码示例。 然后,要确保代码示例正确,使用OpenCV的函数,并加上注释说明参数和用途。例如,cv2.imread的注意事项,如使用cv2.IMREAD_COLOR或cv2.IMREAD_GRAYSCALE。同时,需要提醒用户注意路径问题,以及显示图像后关闭窗口的操作,如cv2.waitKey和cv2.destroyAllWindows。 另外,用户可能对某些处理的效果和应用场景感兴趣,比如高斯模糊与中值模糊的区别,形态学操作中的腐蚀和膨胀的作用,边缘检测的不同算法比较等。这些问题可以作为相关问题提出。 需要检查是否有遗漏的重要预处理技术,比如直方图均衡化,这在引用中没有提到,但属于常用方法。还有归化处理,在引用[2]中的图像分类示例有涉及,应该包含进去。 最后,确保回答结构清晰,分步骤讲解,每个步骤有代码和说明。同时,生成的相关问题要覆盖用户可能进步询问的方向,比如参数调优、组合方法、性能优化等。 总结:整理预处理步骤,编写对应的代码示例,引用相关的引用内容,并生成相关问题。确保每个部分都简洁明了,符合用户需求。</think>以下是为您整理的Python OpenCV图像预处理教程及代码示例,涵盖基础到常用处理技巧: --- ### 图像预处理核心步骤 1. **图像读取与格式转换** ```python import cv2 # 读取图像(第二个参数控制色彩空间) img = cv2.imread("input.jpg", cv2.IMREAD_COLOR) # 彩色模式 gray_img = cv2.imread("input.jpg", cv2.IMREAD_GRAYSCALE) # 直接转为灰度图[^4] ``` 2. **尺寸调整与翻转** ```python resized_img = cv2.resize(img, (300, 200)) # 强制缩放到指定尺寸 flip_img = cv2.flip(img, 1) # 水平翻转(0=垂直,-1=水平垂直)[^3] ``` 3. **噪声消除** ```python # 高斯模糊(适合高斯噪声) blurred = cv2.GaussianBlur(img, (5,5), 0) # 中值模糊(适合椒盐噪声) median_blur = cv2.medianBlur(img, 5) ``` 4. **阈值处理** ```python _, binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) # 简单阈值[^4] adaptive_thresh = cv2.adaptiveThreshold(gray_img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2) ``` 5. **形态学操作** ```python kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3)) # 腐蚀(消除细小噪点) eroded = cv2.erode(binary_img, kernel) # 膨胀(连接断裂区域) dilated = cv2.dilate(binary_img, kernel) ``` --- ### 二、高级预处理技巧 1. **边缘检测** ```python # Canny边缘检测(需先降噪) edges = cv2.Canny(blurred, 100, 200) ``` 2. **直方图均衡化** ```python # 提升对比度(适用于灰度图) equalized = cv2.equalizeHist(gray_img) ``` 3. **颜色空间转换** ```python hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 转HSV空间处理颜色特征 ``` 4. **数据归化** ```python normalized = img.astype(np.float32) / 255.0 # 转为0-1范围[^2] ``` --- ### 三、完整预处理流程示例(车牌识别场景) ```python import cv2 import numpy as np # 1. 读取并灰度化 img = cv2.imread('car_plate.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 2. 高斯模糊降噪 blurred = cv2.GaussianBlur(gray, (5,5), 0) # 3. 边缘检测 edges = cv2.Canny(blurred, 50, 150) # 4. 形态学闭操作(填充小孔) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3)) closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) # 5. 查找轮廓 contours, _ = cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 显示处理结果 cv2.imshow('Processing Flow', np.hstack([gray, blurred, edges, closed])) cv2.waitKey(0) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2345VOR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值