【Opencv学习】01-对图像进行简单的操作

首先了解一下什么是 init.pyi 文件文件

init.pyi 文件是 Python 中的类型提示文件,用于提供对特定包或模块的类型信息。它是类型提示的一种形式,用于描述包、模块、类、函数和变量的静态类型。
在 Python 中,类型提示的目的是为了提供代码编辑器和静态类型检查工具更好的代码补全、类型检查和类型推断功能。init.pyi 文件被放置在包或模块的目录中,并且可以包含该包或模块定义的类、函数、方法和变量的类型注解。
这意味着如果你在一个包中创建了一个__init__.pyi 文件并在其中提供类型注解,编辑器或类型检查工具将能够使用这些注解来推断和验证代码中的类型。这在大型项目中特别有用,因为它可以提供更好的代码可读性、维护性和可靠性。

简单说,就是你可以在里面查阅到函数的使用方法。

cv2.imread() 读入图像

使用cv2.imread() 读入图像。
注意这个图像应该在此程序的工作路径下,并且要给该函数提供完整的路径。

第一个参数给的是文件的名称;
第二个参数是告诉函数如何读取这个图片。(一般情况下不给)
cv2.IMREAD_COLOR :读入一副彩色图像。图像的透明度会被忽略,这个也是默认的参数。
cv2.IMREAD_GRAYSCALE:以灰度图的形式读入图片。

在这里插入图片描述
如果你的路径错误,读取不到图像,可以用print(image)查看,如果返回值是None就是无法读取。
参考代码以及展示

'''
#Author :susocool
#Creattime:2024/1/14
#FileName:02-读入图像
#Description: 对图片进行操作
'''
import cv2
import numpy as np

img = cv2.imread('handsomeboy.png')
cv2.imshow("handsomeboy",img)     # 展示图片


k  = cv2.waitKey(0)
#当键盘按下ESC按键退出界面
if k == 27 :
    cv2.destroyAllWindows()

cv2.waitKey()       #窗口暂停等待键盘输入

#释放内存
cv2.destroyAllWindows()

在这里插入图片描述
如果你的路径是错误的,opencv也不会提醒你,只是当你print img 的时候得到的结果是None。
在这里插入图片描述

cv2.imshow 展示图像

这里没必要继续赘述了。用法参考上面的程序示例,下面是一些重载的用法。其实我也看不太懂。只知道读法是

@typing.overload
def imshow(winname: str, mat: cv2.typing.MatLike) -> None: …

这个版本的imshow函数接受一个名为winname的字符串参数和一个cv2.typing.MatLike类型的mat参数。

在这里插入图片描述
根据传入的mat参数的类型,Python会调用相应的imshow函数版本。这就是函数重载的作用。

cv2.waitKey() 键盘绑定

cv2.waitKey()需要指出他的时间尺度是毫秒级,函数等待特定的几毫秒,看键盘是否有键盘输入。特定的几毫秒内,如果按下任意键,这个函数会返回按键的ASCII码值,程序将继续运行,如果没有键盘输入,返回值为-1.
如果我i们把这个值设置为0,那它将会无限等待键盘输入。通常情况下,我们用来检测特定的按键是否按下。

cv2.destroyAllWindows() 摧毁窗口

可以轻易删除我们创建的窗口。在括号里输入你想要删除的窗口名称,可以摧毁特定的窗口。

cv2.imwrite() 保存图像

首先需要一个文件名,之后跟着你想要保存的图像。
在这里插入图片描述
注意: 文件名要加后缀!!!!!

高级点的写法

k  = cv2.waitKey(0)
#当键盘按下ESC按键退出界面
if k == 27 :
    cv2.destroyAllWindows()
#当键盘按下s 键保存图像,并且退出
elif k == ord('s'):
    cv2.imwrite('xu.png',img)
    cv2.destroyAllWindows()
    

#释放内存
cv2.destroyAllWindows()

如果你使用的是X64系统,则 k = cv2.waitKey(0)应该变成k = cv2.waitKey(0) && 0xFF。

图片上的绘图函数

比如 cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText()
上面所有的这些绘图函数需要设置下面这些参数:
img:你想要绘制图形的那幅图像。

color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)
代表蓝色。对于灰度图只需要传入灰度值。

thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形
就会被填充。默认值是 1.

linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA
为抗锯齿,这样看起来会非常平滑。

示例

import cv2
import numpy as np
# 创建一个黑色背景的画布
img = np.zeros((512,512,3),np.uint8)
# 画线
cv2.line(img,(0,0),(512,512),(255,0,0))
# 画矩形
cv2.rectangle(img,(384,0),(510,128),(0,250,0),3)
# 画圆
cv2.circle(img,(447,63),63,(0,0,255),-1)
# 椭圆
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
# 写字
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)

cv2.imshow("image",img)         # 最后要记得展示图片

k = cv2.waitKey ( 0 )
# 当键盘按下ESC按键退出界面
if k == 27 :
    cv2.destroyAllWindows ()
# 当键盘按下s 键保存图像,并且退出
elif k == ord ( 's' ) :
    cv2.imwrite ( 'pitrue.png', img )
    cv2.destroyAllWindows ()

cv2.destroyAllWindows ()        # 释放内存

在这里插入图片描述

创建画布

img = np.zeros((512,512,3),np.uint8)

创建了一个大小为512x512像素的画布。这个画布是一个三维的NumPy数组,其中前两个维度(512,512)代表图像的高度和宽度,第三个维度(3)代表图像的颜色通道(红色,绿色,蓝色)。
使用np.zeros函数创建了一个全零数组。在OpenCV中,颜色是以BGR(蓝色,绿色,红色)格式表示的,每个颜色通道的值范围是0-255。当所有颜色通道的值都为0时,颜色就是黑色。
所以,np.zeros((512,512,3),np.uint8)创建的是一个全黑色的512x512像素的图像。

如果你想创建一个不同颜色的画布,你可以改变数组中的值。例如,如果你想创建一个全白色的画布,你可以使用np.ones((512,512,3),np.uint8)*255
【np.ones创建全1数组,再 *255 就是(255,255,255)】

画线

要画一条线,你只需要告诉函数这条线的起点和终点。

cv2.line(img,(0,0),(512,512),(255,0,0))

在这里插入图片描述
img:图像。在这个例子中,它是一个512x512像素的全黑色图像。
pt1:线段的第一个点。在这个例子中,它是(0,0),也就是图像的左上角。
pt2:线段的第二个点。在这个例子中,它是(512,512),也就是图像的右下角。
color:线段的颜色。在这个例子中,它是(255,0,0),在BGR颜色空间中,这代表蓝色。
thickness:线段的厚度。这是一个可选参数,如果不提供,那么默认值是1。
lineType:线段的类型。这是一个可选参数,如果不提供,那么默认值是8。
shift:点坐标中的小数位数。这是一个可选参数,如果不提供,那么默认值是0。

画矩形

cv2.rectangle(img,(384,0),(510,128),(0,250,0),3)

简单说就是,图纸,左上角顶点、右下角顶点的坐标,颜色,画笔粗细。

画圆

cv2.circle(img,(447,63),63,(0,0,255),-1)

简单说是,图纸,定圆形的中心点坐标,半径大小,颜色,封闭图像

画椭圆

Python OpenCV cv2.ellipse()用法及代码示例

用法: cv2.ellipse(image, centerCoordinates, axesLength, angle,
startAngle, endAngle, color [, thickness[, lineType[, shift]]])

参数:
image:它是要在其上绘制椭圆的图像。
centerCoordinates:它是椭圆的中心坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
axesLength:它包含两个变量的元组,分别包含椭圆的长轴和短轴(长轴长度,短轴长度)。
angle:椭圆旋转角度,以度为单位。
startAngle:椭圆弧的起始角度,以度为单位。
endAngle:椭圆弧的终止角度,以度为单位。
color:它是要绘制的形状边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
thickness:是形状边界线的粗细像素。厚度-1像素将用指定的颜色填充形状。
lineType:这是一个可选参数,它给出了椭圆边界的类型。
shift:这是一个可选参数。它表示中心坐标中的小数位数和轴的值。

返回值:它返回一个图像。

cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

简单说,一个参数是中心点的位置坐标。
下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演
顺时针方向起始的角度和结束角度,如果是 0 很 360,就是整个椭圆。

写字

font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)

参数说明
1、img:要在其上绘制文本的图像。
2、‘OpenCV’:要绘制的文本字符串。
3、(10,500):文本字符串在图像中的左下角的坐标。
4、font:字体类型。在这个例子中,使用的是 cv2.FONT_HERSHEY_SIMPLEX。
这个字体好看~
5、4:字体大小的缩放因子。
6、(255,255,255):文本颜色,以 BGR 形式表示。在这个例子中,颜色为白色。
7、2:线条的粗细,以像素为单位。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值