(ง •_•)ง[Python3 OpenCV4]2.图像操作

网友投稿 800 2022-05-29

文章目录

接口文档

cv2.imread() 读取图片

cv2.imshow() 使用窗口显示图片

cv2.imwrite()保存图片

cv.namedWindow()

获取和修改像素点值

图片属性

ROI

通道分割与合并

附件图片

接口文档

Mat Object

cv2.imread()

cv2.imshow()

cv2.imwrite()

cv.namedWindow()

cv2.imread() 读取图片

从文件加载图像

(ง •_•)ง[Python3 OpenCV4]2.图像操作

支持格式如下:

Windows位图-.bmp,.dib(始终支持)

JPEG文件-.JPEG,.jpg,*.jpe(参见注释部分)

JPEG 2000文件-*.jp2(请参见注释部分)

便携式网络图形-*.png(见注释部分)

WebP-*.WebP(参见注释部分)

便携式图像格式-.pbm、.pgm、.ppm.pxm、*.pnm(始终支持)

太阳光栅-.sr,.ras(始终支持)

TIFF文件-.TIFF,.tif(请参见注释部分)

OpenEXR图像文件-*.exr(请参阅注释部分)

Radiance HDR-.HDR,.pic(始终支持)

import cv2 print(cv2.__version__) # 加载灰度图 img = cv2.imread('lena.jpg', 0)

1

2

3

4

参数如图,详情可以查找官方文档

cv2.IMREAD_UNCHANGED:原图加载,使用alpha通道,否则将被裁剪(-1)

cv2.IMREAD_GRAYSCALE:灰度图(0)

cv2.IMREAD_COLOR:彩色图,默认值(1)

cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)

cv2.IMREAD_ANYDEPTH:如果已设置,则在输入具有相应深度时返回16位/32位图像,否则将其转换为8位。

其余的自己可以翻译去看

调用举例

import cv2 print(cv2.__version__) # 加载灰度图 img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)

1

2

3

4

cv2.imshow() 使用窗口显示图片

参数1 窗口名

参数2 图片Mat对象

import cv2 print(cv2.__version__) # 加载灰度图 img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE) # 使用cv2.imshow()显示图片,窗口会自适应图片的大小 cv2.imshow('lena', img) cv2.waitKey(0)

1

2

3

4

5

6

7

8

9

10

11

cv2.imwrite()保存图片

cv2.imwrite('lena_gray.jpg', img)

1

cv.namedWindow()

import cv2 print(cv2.__version__) # 加载灰度图 img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE) #定义窗口 cv2.namedWindow('lena2', cv2.WINDOW_NORMAL) # 显示窗口 cv2.imshow('lena2', img) cv2.waitKey(0)

1

2

3

4

5

6

7

8

9

10

11

12

13

可传入参数介绍

WINDOW_NORMAL或WINDOW_AUTOSIZE:WINDOW_NORMAL允许您调整窗口大小,而WINDOW_AUTOSIZE则自动调整窗口大小以适合显示的图像(请参见imshow),并且您不能手动更改窗口大小。

WINDOW_FREERATIO或WINDOW_KEEPRATIO:WINDOW_FREERATIO调整图像时不考虑其比率,而WINDOW_KEEPRATIO保持图像比率。

WINDOW_GUI_NORMAL或WINDOW_GUI_EXPANDED:WINDOW_GUI_NORMAL是在没有状态栏和工具栏的情况下绘制窗口的旧方法,而WINDOW_GUI_EXPANDED是一种新的增强型GUI。默认情况下,flags==WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED

获取和修改像素点值

import cv2 img = cv2.imread('lena.jpg') #取坐标下的像素点 px = img[100, 90] print(px) # [163 184 205] # 只获取蓝色blue通道的值 px_blue = img[100, 90, 0] print(px_blue) # 163 #高性能方式 BGR print(img.item(100,90,0)) img[100, 90] = [255, 255, 255]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

图片属性

import cv2 img = cv2.imread('lena.jpg') print(img.shape) # (263, 247, 3) # 形状中包括行数、列数和通道数 height, width, channels = img.shape print(img.dtype) print(img.size)

1

2

3

4

5

6

7

8

9

ROI

感兴趣区域

import cv2 img = cv2.imread('lena.jpg') # 截取脸部ROI face = img[100:200, 115:188] cv2.imshow('face', face) cv2.waitKey(0)

1

2

3

4

5

6

通道分割与合并

通道分割与合并

彩色图的BGR三个通道是可以分开单独访问的,也可以将单独的三个通道合并成一副图像。分别使用cv2.split()和cv2.merge():

import cv2 img = cv2.imread('lena.jpg') b, g, r = cv2.split(img) cv2.imshow('lena-b', b) cv2.imshow('lena-g', g) cv2.imshow('lena-r', r) img = cv2.merge((b, g, r)) cv2.imshow('lena-rgb', img) cv2.waitKey(0)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

split()函数比较耗时,更高效的方式是用numpy中的索引,如提取B通道:·

import cv2 img = cv2.imread('lena.jpg') b = img[:, :, 0] g = img[:, :, 1] r = img[:, :, 2] cv2.imshow('b', b) cv2.imshow('g', g) cv2.imshow('r', r) cv2.waitKey(0)

1

2

3

4

5

6

7

8

9

附件图片

OpenCV Python 图像处理

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:还在用背单词App?使用Python开发英语单词自测工具,助你逆袭单词王!
下一篇:【Flutter】ListView 列表 ( List 集合的 map 方法说明 | 垂直列表 | 水平列表 | 代码示例 )
相关文章