一、OpenCV 简介

OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,用于图像处理、视频分析、机器学习等领域。

OpenCV 能做什么?

图像读取与显示

视频读取与处理

人脸检测

目标识别

图像增强

机器学习应用

OpenCV 的特点

开源免费

支持多平台(Windows / Linux / Mac)

支持多语言(Python / C++ / Java)

二、核心功能

OpenCV 主要用于:

图像处理

视频处理

特征提取

目标检测

深度学习支持(DNN模块)

三、安装相关库

opencv-python==3.4.18.65

opencv-contrib-python==3.4.18.65(包含了其他一些图像处理算法函数的opencv扩展库)

四、Opencv操作

导入

import cv2

图片读取

a=cv2.imread(r"C:\Users\LEGION\Desktop\tupian")
cv2.imshow('tu',a)
b =cv2.waitKey(0)
print(b)
cv2.destroyAllWindows()
print("图像形状 (shape):",a.shape)#高、宽、通道数
print("图像数据类型(dtype):",a.dtype)#无符号8位整数,用于表示像素值的范围在 0到255之间。
print("图像大小(size):",a.size)

图片转化为灰度图

b=cv2.imread(r"C:\Users\LEGION\Desktop\tupian",cv2.IMREAD_GRAYSCALE)
cv2.imshow('xx',b)
a =cv2.waitKey(0)
cv2.destroyAllWindows()
print("图像形状 (shape):",b.shape)#高、宽、通道数
print("图像数据类型(dtype):",b.dtype)#无符号8位整数,用于表示像素值的范围在 0到255之间。
print("图像大小(size):",b.size)
cv2.imwrite('IRON MAN_Gary.jpg',b)

图片的切片(ROI区域截取)

a=cv2.imread(r"C:\Users\LEGION\Desktop\tupian")
b=a[30:230,100:300]
cv2.imshow('yuantu',a)
cv2.imshow('qiepian',b)
cv2.waitKey(0)
cv2.destroyAllWindows()

视频读取

打开视频文件

video_capture = cv2.VideoCapture(r"D:\KuGou\周杰伦 - 晴天.mkv") # 摄像头:0#检查视频是否成功打开
if not video_capture.isOpened():
    print("无法打开视频文件")
    exit()

循环读取视频帧

while True:
    ret, frame = video_capture.read()#ret是布尔值,表示是否成功读取了帧,frame 是读取到的帧#检查是否成功读取帧
    if not ret:
        break

将图像从一种颜色空间转换为另一种颜色空间。

frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 显示当前帧
cv2.imshow('Video', frame)

检查用户是否按下"esc’键,如果是则退出循环

 if cv2.waitKey(60) == 27:
         break# 释放资源

这里规定了waitKey == 27就表示按下ASCLL码值为27(ESC键)才能退出播放

以下是完整代码,防止格式错误

import cv2
#打开视频文件
video_capture = cv2.VideoCapture(r"D:\KuGou\周杰伦 - 晴天.mkv") # 摄像头:0#检查视频是否成功打开
if not video_capture.isOpened():
    print("无法打开视频文件")
    exit()
#循环读取视频帧
while True:
    ret, frame = video_capture.read()#ret是布尔值,表示是否成功读取了帧,frame 是读取到的帧#检查是否成功读取帧
    if not ret:
        break
#将图像从一种颜色空问转换为另一种颜色空间。(在此可添加各种对图片的处理步骤已达到对视频处理的效果)
    frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 显示当前帧
    cv2.imshow('Video', frame)
检查用户是否按下"esc'键,如果是则退出循环
    if cv2.waitKey(60) == 27:
        break# 释放资源
video_capture.release()
cv2.destroyAllWindows()

RGB 颜色通道提取

b, g, r = cv2.split(img)

cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)

合并颜色

img_merge = cv2.merge([b, g, r])

图片打码

import cv2

img = cv2.imread("test.jpg")

# 选择打码区域
x, y, w, h = 100, 100, 200, 200
roi = img[y:y+h, x:x+w]

# 缩小再放大
roi_small = cv2.resize(roi, (10, 10))
roi_mosaic = cv2.resize(roi_small, (w, h), interpolation=cv2.INTER_NEAREST)

img[y:y+h, x:x+w] = roi_mosaic

cv2.imshow("mosaic", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片组合

import numpy as np

img1 = cv2.imread("1.jpg")
img2 = cv2.imread("2.jpg")

result = np.hstack((img1, img2))  # 水平拼接
cv2.imshow("combine", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片缩放

img_resize = cv2.resize(img, (500, 300))

按比例缩放:

img_resize = cv2.resize(img, None, fx=0.5, fy=0.5)
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐