Opencv-Python的常用操作

11 篇文章 0 订阅
6 篇文章 0 订阅

前言

研一时总结的一点实用函数,这两天没事,整理出来放到网上。

安装

pip install opencv-python

图片加载、显示和保存

读取cv2.imread

cv2.imread(img_path,flag) 读取图片,返回图片对象

img_path:

  • 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None

flag:

  • cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
  • cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
  • cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1

特别注意:cv2.imread读入的通道顺序是BGR,而plt.imread读入的顺序是RGB。因此可能会涉及到通道顺序转换

img = cv2.imread('1.jpg')
# cv2默认为bgr顺序
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 

# 或者这样
im = im[:,:,::-1]

查看维度h, w, c = img.shape

注:

  1. 路径必须是全英文+“/”
  2. 彩色文件读取为[h,w,c],黑白文件读取为[h,w]
  3. 读取的数据类型为uint8

在这里插入图片描述

cv2.imshow

cv2.imshow(window_name,img)

显示图片,窗口自适应图片大小。可以指定多个窗口名称,显示多个图片。

window_name: 指定窗口的名字
img:显示的图片对象

cv2.namedWindow(winname, 属性):

创建一个窗口。winname作为窗口的唯一标识,如果想使用指定窗口显示目标图像,需要让cv2.imshow(winname)中的winname与窗口的winname需要保持一致。

窗口创建时可以添加的属性:

  • cv2.WINDOW_NORMAL:窗口大小可以改变(同cv2.WINDOW_GUI_NORMAL)
  • cv2.WINDOW_AUTOSIZE:窗口大小不能改变
  • cv2.WINDOW_FREERATIO:窗口大小自适应比例
  • cv2.WINDOW_KEEPRATIO:窗口大小保持比例

cv2.waitKey(millseconds)

键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)

millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件

在查看图片时,通常写0。由程序员手动关闭

cv2.destroyAllWindows(window_name)

window_name: 需要关闭的窗口名字,不传入时关闭所有窗口

key = cv2.waitKey(0)
if key==27: #按esc键时,关闭所有窗口
    print(key)
    cv2.destroyAllWindows()

图片写入

cv2.imwrite(img_path_name,img)
img_path_name:保存的文件名
img:文件对象

基础运算

通常来说,对于像素的运算工作,一般都是使用numpy来完成的。我们只是使用opencv已封装好的函数,比如翻转,裁剪啊什么的。

像素的加减乘除

  • dst = cv2.add(m1, m2)
  • dst = cv2.subtract(m1, m2)
  • dst = cv2.multiply(m1, m2)
  • dst = cv2.divide(m1, m2)

注意:两个像素的相加不完全等于numpy中的相加

x = np.uint8([120])
y = np.uint8([240])
# opencv对超过255的值(uint8),直接截取255
print(cv2.add(x,y))
# numpy的做法是(x+y)%256
print(x+y)

而将像素值转变为np.float则没有此问题

与或非或

  • dst = cv2.bitwise_and(m1, m2)
  • dst = cv2.bitwise_or(m1, m2)
  • dst = cv2.bitwise_not(m1, m2)
  • dst = cv2.bitwise_xor(m1, m2)

均值和标准差

m, std = cv2.meanStdDev(im)
注意是标准差

图像的缩放和翻转

cv2.resize

dst = cv2.resize( src, dsize, fx, fy, interpolation )

src输入图片
dsize输出图片尺寸
fx, fy沿x轴,y轴的缩放系数
interpolation插入方式
cv2.INTER_NEAREST最近邻插值
cv2.INTER_LINEAR双线性插值(默认设置)
cv2.INTER_AREA使用像素区域关系进行重采样
cv2.INTER_CUBIC4x4像素邻域的双三次插值
cv2.INTER_LANCZOS48x8像素邻域的Lanczos插值
h,w,c = im.shape
# 直接指定大小,尺寸必须是整数
# 注意此处的顺序是(w,h)!
im2 = cv2.resize(im,(round(0.5*w),round(0.5*h)))

# 指定缩放比例
im3 = cv2.resize(im,(0,0),fx=0.5,fy=0.5)

cv2.filp

  • img2=cv2.flip(img1, 0) #上下翻转
  • img2=cv2.flip(img1, 1)#左右翻转
  • img2=cv2.flip(img1, -1) #上下、左右翻转

图像加框

其实当时的程序里用到很多cv2的函数,这里只记了一个基础的。需要什么再查吧。
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None

重点在于以下几个参数

  • img,输入图像
  • pt1,方框左上角的坐标(x,y)
  • pt2,方框右下角的坐标(x,y)
  • color,框的颜色(B,G,R)
  • thicknes,线的粗细
cv2.rectangle(im,(0,200),(2000,2000),(0,0,255),15)

参考

  1. 官方API
  2. 【Python】OpenCV常用操作函数大全!
  3. OpenCV-Python学习—基础知识
  4. python版OpenCV常用api调用 (这一版很全)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
opencv-python常用操作包括图像的读取、显示、保存,以及图像的基本处理操作,如灰度转换、裁剪、缩放、旋转等。 下面是一些常用opencv-python操作: 1. 图像读取:使用cv2.imread()函数读取图像文件,指定文件路径和读取模式。例如:image = cv2.imread('image.jpg')。 2. 图像显示:使用cv2.imshow()函数显示图像,参数为窗口名称和图像数据。例如:cv2.imshow('image', image)。 3. 图像保存:使用cv2.imwrite()函数将图像保存到文件中,参数为保存路径和图像数据。例如:cv2.imwrite('output.jpg', image)。 4. 灰度转换:使用cv2.cvtColor()函数将彩色图像转换为灰度图像,参数为原始图像和转换模式。例如:gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)。 5. 裁剪图像:使用数组切片操作来裁剪图像的特定区域。例如:cropped_image = image[y:y+h, x:x+w]。 6. 缩放图像:使用cv2.resize()函数调整图像大小,参数为原始图像和目标大小。例如:resized_image = cv2.resize(image, (new_width, new_height))。 7. 旋转图像:使用cv2.getRotationMatrix2D()和cv2.warpAffine()函数来旋转图像,分别生成旋转矩阵和应用矩阵。例如:M = cv2.getRotationMatrix2D(center, angle, scale);rotated_image = cv2.warpAffine(image, M, (width, height))。 以上是一些常见的opencv-python操作,可以根据具体需求进行选择和组合使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [如何解决opencv-python,以及opencv-contrib-python包安装运行解决人脸识别问题等问题](https://blog.csdn.net/Go_ahead_forever/article/details/131529050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [opencv-python常用函数汇总](https://blog.csdn.net/qq_45752541/article/details/125037327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值