AndreaDO

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

opencv库图像基础1-python

opencv库图像基础-python

基本操作

图片颜色通道

非灰度图的颜色通道是红绿蓝,在opencv中默认是BGR的顺序

argparse模块

argparse 库是 Python 标准库中用于命令行选项与参数解析的模块。它可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数。

argparse 库的主要用途包括:

  • 定义命令行选项和参数
  • 解析命令行输入
  • 验证命令行输入
  • 提供命令行帮助

argparse 库的使用方法非常简单。首先,需要创建一个 ArgumentParser 对象。然后,可以使用 add_argument() 方法来定义命令行选项和参数。add_argument() 方法的参数包括:

  • name:选项或参数的名称。
  • action:选项或参数的行为。
  • type:选项或参数的类型。
  • default:选项或参数的默认值。
  • help:选项或参数的帮助信息。

例如,以下代码定义了一个命令行选项和一个参数:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--file", action="store", type=str, help="输入文件")
parser.add_argument("--n", action="store", type=int, default=10, help="重复次数")

args = parser.parse_args()
print(args.file)
print(args.n)

该代码将解析以下命令行:

python my_program.py --file input.txt --n 20

解析结果如下:

input.txt
20

argparse 库还提供了许多其他功能,可以帮助开发人员编写更友好的命令行接口。例如,argparse 库可以提供命令行帮助、验证命令行输入等功能。

以下是一些 argparse 库的使用示例:

  • 定义命令行选项和参数
  • 解析命令行输入
  • 验证命令行输入
  • 提供命令行帮助

argparse 库是一个非常强大的命令行解析模块,可以帮助开发人员编写更友好的命令行接口。

import argparse		# 导入库
parser = argparse.ArgumentParser()	# 获取所有参数
parser.add_argument(“-n1”, “--number one”, help=“第一个参数”, type=int) # 添加参数1
parser.add_argument(“-n2”, “--number two”, help=“第二个参数”, type=int) # 添加参数2
args = parser.parse_args() #解析所有参数

读取显示图片

1.通过anaconda

import cv2
img=cv2.imread("logo.png")
cv2.imshow(img)
cv2.waitKey(0)
cv2.destoryAllWindows()

2.通过argparse

import cv2
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("path_image",help="path to input the image")
args=parser.parser_args() #解析参数
#加载图片1
img=cv2.imread(args.path_image)
cv2.imshow("logo",img)
#加载图片2
args_list = var(parser.parse_args())
img2 = cv2.imread(args_dict["path_image"])
cv2.imshow("logo2",img2)
cv2.waitKey(0)
cv2.destoryAllWindows()

读取处理保存图片

# 1 导入库
import cv2
import argparse

# 2 获取参数
parser = argparse.ArgumentParser()

# 3 添加参数
parser.add_argument("img_input", help="read one image")
parser.add_argument("img_output", help="save the processed image")

# 4 解析参数,以字典形式保存参数和值
args = vars(parser.parse_args())

# 5 加载图片
img = cv2.imread(args["img_input"])

# 6 处理:灰度处理
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 7 保存图片
cv2.imwrite(args["img_output"], img_gray)

# 8 显示图片
cv2.imshow("Original Image", img)
cv2.imshow("Gray Image", img_gray)

# 9 等待
cv2.waitKey(0)

# 10 关闭窗口
cv2.destroyAllWindows()

读取摄像头、视频文件

读取摄像头

#filename 是视频文件的路径或摄像头的设备 ID。如果 filename 为空,则默认从摄像头 0 捕获视频。
capture = cv2.VideoCapture(filename) # 视频捕获
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 帧的宽度
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 帧的高度
fps = capture.get(cv2.CAP_PROP_FPS) # 每秒的帧数
#判断摄像头是否打开
if capture.isOpened() is False:
  print("error")
# 摄像头一直读取视频直到关闭
while capture.isOpened():
    # 通过摄像头,一帧一帧的捕获
    ret, frame = capture.read() #ret是布尔类,frame是视频帧图像,numpy.ndarray类型
    if ret is True:
        # 显示捕获的帧
        cv2.imshow("frame", frame)
        # 将捕获的帧转化为灰度的帧
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示灰度的帧
        cv2.imshow("gray frame", gray_frame)
        # 键盘输入q,退出视频捕获
        if cv2.waitKey(20) & 0xFF == ord('q'):
            break
    else:
        break

# 释放
capture.release()
cv2.destroyAllWindows()

读取视频文件

基本上和摄像头差不多,只是少了一个循环代码while capture.isOpened():
从而循环读取ret

# 5 加载视频文件
capture = cv2.VideoCapture(args.video_path)
# 6 读取视频
ret, frame = capture.read() # ret 是否读取到了帧(图片)
while ret:
    cv2.imshow("video", frame)
    ret, frame = capture.read() # 继续读取帧
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break
capture.release()
cv2.destroyAllWindows() # 关闭

保存摄像头读取到的视频


# 5 捕获摄像头
capture = cv2.VideoCapture(0)

# 6 是否打开了摄像头
if capture.isOpened() is False:
    print("Camera Error !")

# 7 获取帧的属性:宽,高,以及fps
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 宽
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 高
fps = capture.get(cv2.CAP_PROP_FPS)

# 8 对视频进行编码
fourcc = cv2.VideoWriter_fourcc(*"XVID")
output_gray = cv2.VideoWriter(args.video_output, fourcc, int(fps), (int(frame_width), int(frame_height)), False)
#上面函数返回VideoWriter 对象,该对象是 cv2.VideoWriter 类的实例
# 9 读取摄像头
while capture.isOpened():
    ret, frame = capture.read() # 一帧一帧地读取
    if ret is True:
        # 10 将读取到的帧转换为灰度
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 11 将转换后的帧写入都新的视频文件中
        output_gray.write(gray_frame)
        # 12 显示视频
        cv2.imshow("gray", gray_frame)
        # 13 等待或按q退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# 14 释放资源
capture.release()
output_gray.release()
cv2.destroyAllWindows()

fourcc = cv2.VideoWriter_fourcc(*"XVID")这个代码含义

该代码使用 OpenCV 的 cv2.VideoWriter_fourcc 函数生成一个四字符代码 (four-character code)。四字符代码是用于指定视频编码格式的一种标准。

在上述代码中,"XVID" 是四字符代码的字符串表示。cv2.VideoWriter_fourcc 函数将该字符串转换为四字符代码,并返回该代码。

四字符代码由四个字符组成,每个字符代表一个十六进制数字。例如,"XVID" 的四字符代码为 0x31564958。

在 OpenCV 中,常用的四字符代码包括:

MJPG:Motion JPEG
XVID:XviD
DIVX:DivX
H264:H.264
MPEG4:MPEG-4
在上述代码中,fourcc 变量将用于指定视频的编码方式。

posted on   AndreaDO  阅读(21)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示