Python opencv图像处理基础总结(一) 环境搭建 基础操作

简介: Open Source Computer Vision Library,OpenCV于 1999 年由 Intel 建立,如今由 Willow Garage 提供支持。OpenCV是一个基于 BSD 许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。

Open Source Computer Vision Library,OpenCV于 1999 年由 Intel 建立,如今由 Willow Garage 提供支持。OpenCV是一个基于 BSD 许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。它轻量而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。


1. 环境搭建:


命令行 pip 安装依赖库即可,如下所示:


pip install opencv-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install opencv-contrib-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install pytesseract -i http://pypi.douban.com/simple --trusted-host pypi.douban.com


安装 opencv 的扩展模块


opencv1.png


2. 读取并显示图片


importcv2ascvdefget_image_info(image):
print(type(image))      # <class 'numpy.ndarray'>print(image.shape)      # 高度 宽度  通道数print(image.size)       # 像素大小print(image.dtype)      # 数据类型src=cv.imread(r'D:\python\pycharm2020\test\004.jpg')
cv.imshow("input image", src)
get_image_info(src)
cv.waitKey(0)
cv.destroyAllWindows()


运行结果如下:


<class 'numpy.ndarray'>   # 图像是 三维numpy.ndarray数组(500, 500, 3)             # 宽 高 RGB三通道750000# 500*500*3uint8                     # unit8类型  0-255


opencv2.png


3. 读取视频和调用本地摄像头


importcv2ascvdefread_video():
cap=cv.VideoCapture(r'D:\beauty\video\test.mp4')
whileTrue:
ret, frame=cap.read()
ifret==False:
breakcv.imshow('video', frame)
cv.waitKey(20)
read_video()


importcv2ascv# 调用笔记本内置镜头cap=cv.VideoCapture(0, cv.CAP_DSHOW)
whileTrue:
ret, frame=cap.read()
frame=cv.flip(frame, 1)
cv.imshow('video', frame)   # 显示镜头捕获的每一帧ifcv.waitKey(100) &0xff==ord('q'):   # 按q退出breakcap.release()
cv.destroyAllWindows()


释放摄像头对象时错误:


SourceReaderCB::~SourceReaderCBterminatingasynccallback


解决方法:


cap=cv.VideoCapture(0, cv.CAP_DSHOW)


4. 色彩空间转换API的调用


importcv2ascvdefcolor_space_transform(img):
gray=cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
hsv=cv.cvtColor(img, cv.COLOR_BGR2HSV)
cv.imshow('hsv', hsv)
hls=cv.cvtColor(img, cv.COLOR_BGR2HLS)
cv.imshow('hls', hls)
YCrCb=cv.cvtColor(img, cv.COLOR_BGR2YCrCb)
cv.imshow('YCrCb', YCrCb)
yuv=cv.cvtColor(img, cv.COLOR_BGR2YUV)
cv.imshow('yuv', yuv)
src=cv.imread(r'D:\python\pycharm2020\test\004.jpg')
src=cv.resize(src, None, fx=0.5, fy=0.5)
cv.imshow('src', src)
color_space_transform(src)
cv.waitKey(0)
cv.destroyAllWindows()


运行效果如下:


opencv3.png


5. InRage函数的使用,追踪特定颜色


函数的参数意义:第一个参数为原数组,可以为单通道,多通道。第二个参数为下界,第三个参数为上界

mask = cv2.inRange(hsv, lower_blue, upper_blue)


  • 第一个参数:hsv指的是原图(原始图像矩阵)
  • 第二个参数:lower_blue指的是图像中低于这个 lower_blue 的值,图像值变为0
  • 第三个参数:upper_blue指的是图像中高于这个 upper_blue的值,图像值变为0(0代表黑色)

而在lower_blue~upper_blue之间的值变成255 (255代表白色)


即:opencv的 inRange 函数可提取特定颜色,使特定颜色变为白色,其他颜色变为黑色,从而实现图像的二值化处理。


HSV颜色对应的RGB分量范围表如下:(这里是三通道的)


opencv4.png


测试所用图像如下:


opencv5.jpg


追踪绿色,代码如下:


importcv2ascvimportnumpyasnpdeftracking_colors(image):
hsv=cv.cvtColor(image, cv.COLOR_BGR2HSV)
# 追踪绿色lower_hsv=np.array([35, 43, 46])
upper_hsv=np.array([77, 255, 255])
mask=cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
cv.imshow('mask', mask)
cv.waitKey(0)
cv.destroyAllWindows()
src=cv.imread(r'D:\python\pycharm2020\test\001.jpg')
tracking_colors(src)


运行效果如下:


opencv6.png


追踪蓝色,代码如下:


importcv2ascvimportnumpyasnpdeftracking_colors(image):
hsv=cv.cvtColor(image, cv.COLOR_BGR2HSV)
# 追踪蓝色lower_hsv=np.array([100, 43, 46])
upper_hsv=np.array([124, 255, 255])
mask=cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
cv.imshow('mask', mask)
cv.waitKey(0)
cv.destroyAllWindows()
src=cv.imread(r'D:\python\pycharm2020\test\001.jpg')
tracking_colors(src)


运行效果如下:


opencv7.png


通道分离与合并


importcv2ascvsrc=cv.imread(r'D:\python\pycharm2020\test\004.jpg')
src=cv.resize(src, None, fx=0.5, fy=0.5)
b, g, r=cv.split(src)     # 分离cv.imshow('blue', b)
cv.imshow('green', g)
cv.imshow('red', r)
cv.imshow('src', src)
cv.waitKey(0)
cv.destroyAllWindows()


运行效果如下:


opencv8.png


importcv2ascvsrc=cv.imread(r'D:\python\pycharm2020\test\004.jpg')
b, g, r=cv.split(src)
src[:, :, 2] =0# 修改了的图片cv.imshow('changed src', src)
src1=cv.merge((b, g, r))   # 合并得到原来的图片cv.imshow('merged src', src1)
cv.waitKey(0)


运行效果如下:


opencv9.png


6. 像素运算


算数运算: 像素的算术运算涉及加减乘除等基本运算(要进行算术运算,两张图片的shape必须一样)


实例如下:


importcv2ascvdefadd_demo(m1, m2):   # 像素的加运算dst=cv.add(m1, m2)
cv.imshow("add_demo", dst)
defsubtract_demo(m1, m2):   # 像素的减运算dst=cv.subtract(m1, m2)
cv.imshow("subtract_demo", dst)
defdivide_demo(m1, m2):   # 像素的除法运算dst=cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
defmultiply_demo(m1, m2):   # 像素的乘法运算dst=cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst)
src1=cv.imread(r'D:\python\pycharm2020\test\007.png')
src2=cv.imread(r'D:\python\pycharm2020\test\008.png')
cv.imshow('image1', src1)
cv.imshow('image2', src2)
# 像素的算术运算(加、减、乘、除)   两张图片必须shape一致add_demo(src1, src2)
subtract_demo(src1, src2)
divide_demo(src1, src1)
multiply_demo(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows()


运行效果如下:


opencv10.png

opencv11.png


像素的逻辑运算: 像素的逻辑运算涉及与、或、、异或等基本运算(要进行逻辑运算,两张图片的shape必须一样)


实例如下:


importcv2ascvdefand_demo(m1, m2):     # 与运算  每个像素点每个通道的值按位与dst=cv.bitwise_and(m1, m2)
cv.imshow("and_demo", dst)
defor_demo(m1, m2):      # 或运算   每个像素点每个通道的值按位或dst=cv.bitwise_or(m1, m2)
cv.imshow("or_demo", dst)
defnot_demo(m1):         # 非运算 每个像素点每个通道的值按位取反dst=cv.bitwise_not(m1)
cv.imshow("not_demo", dst)
src1=cv.imread(r'D:\python\pycharm2020\test\007.png')
src2=cv.imread(r'D:\python\pycharm2020\test\008.png')
cv.imshow('image1', src1)
cv.imshow('image2', src2)
# 像素的逻辑运算(与、或、非)  两张图片必须shape一致and_demo(src1, src2)
or_demo(src1, src2)
not_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()


运行效果如下:


opencv12.png

opencv13.png


调节图片对比度和亮度:

简单测试如下:


importcv2ascvimportnumpyasnpdefadjust_brightness_image(image, c, b):  # 第2个参数rario为对比度  第3个参数b为亮度height, width, channels=image.shapeblank=np.zeros([height, width, channels], image.dtype)  # 新建的一张全黑图片和img1图片shape类型一样,元素类型也一样dst=cv.addWeighted(image, c, blank, 1-c, b)
cv.imshow("adjust_contrast_brightness", dst)
src=cv.imread(r'D:\python\pycharm2020\test\004.jpg')
cv.imshow("first", src)
# 调节图片对比度和亮度      contrast and brightness (1.2, 100)  (2.5, 0) (0.5 10)adjust_brightness_image(src, 1.2, 100)
cv.waitKey(0)
cv.destroyAllWindows()


运行效果如下:


opencv14.png

opencv15.png

opencv16.png

目录
相关文章
|
2月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
296 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
24天前
|
机器学习/深度学习 数据可视化 Docker
Python环境
Python环境
32 3
|
26天前
|
计算机视觉 开发者 Python
利用Python进行简单的图像处理
【10月更文挑战第36天】本文将引导读者理解如何使用Python编程语言和其强大的库,如PIL和OpenCV,进行图像处理。我们将从基本的图像操作开始,然后逐步深入到更复杂的技术,如滤波器和边缘检测。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供新的视角和技能,让你能够更好地理解和操作图像数据。
|
1月前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
70 3
|
2月前
|
Shell 开发者 iOS开发
Python 环境搭建之 conda
本文介绍了Python项目管理工具Conda的两种版本——Anaconda和Miniconda的安装方法及环境使用,特别针对MacOS系统。Anaconda为全量版,适合新手;Miniconda则为轻量级版本,适合有经验的开发者。文中还提供了具体的安装命令和路径说明,帮助用户顺利完成安装并验证安装结果。
Python 环境搭建之 conda
|
2月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
377 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
2月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
442 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
2月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
131 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
2月前
|
Python Windows
利用Python在Win10环境下实现拨号上网
利用Python在Win10环境下实现拨号上网
41 4
|
2月前
|
TensorFlow 算法框架/工具 虚拟化
python开发先创建虚拟环境呀
python开发先创建虚拟环境呀
23 1