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

举报
鱼酱 发表于 2022/01/06 23:43:32 2022/01/06
【摘要】 文章目录 接口文档cv2.imread() 读取图片cv2.imshow() 使用窗口显示图片cv2.imwrite()保存图片cv.namedWindow() 获取和修改像素点值图片属性RO...

接口文档

cv2.imread() 读取图片

从文件加载图像
支持格式如下:

  • 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

附件图片

在这里插入图片描述

文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。

原文链接:yujiang.blog.csdn.net/article/details/104152104

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。