计算机视觉是人工智能领域中的重要分支,而OpenCV(Open Source Computer Vision Library)作为一个开源的计算机视觉库,提供了丰富的功能和工具,成为了研究、开发和应用计算机视觉技术的重要工具之一。本文将介绍OpenCV的各种用途,展示它在图像处理、特征提取、目标检测等方面的强大能力。
安装opencv:
pip install opencv-python
好的,下面是十个完整的OpenCV-Python实例代码:
1. 图像读取:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 图像缩放:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#缩放图像
resized_image = cv2.resize(image, (500, 400))
#显示缩放后的图像
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 边缘检测:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#灰度化处理
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#边缘检测
edges = cv2.Canny(gray_image, 100, 200)
#显示边缘图像
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 图像旋转:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#获取图像尺寸
height, width = image.shape[:2]
#旋转图像
rotation_matrix = cv2.getRotationMatrix2D((width/2, height/2), 45, 1)
rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height))
#显示旋转后的图像
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. 图像裁剪:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#裁剪图像
cropped_image = image[100:300, 200:400]
#显示裁剪后的图像
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. 图像平滑处理(均值滤波):
import cv2
#读取图像
image = cv2.imread('image.jpg')
#平滑处理
blurred_image = cv2.blur(image, (10, 10))
#显示平滑后的图像
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
7. 阈值处理:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#灰度化处理
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#阈值处理
_, threshold_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
#显示阈值处理后的图像
cv2.imshow('Threshold Image', threshold_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
8. 形态学操作(膨胀):
import cv2
import numpy as np
#读取图像
image = cv2.imread('image.jpg')
#灰度化处理
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#二值化处理
_, threshold_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
#定义膨胀核
kernel = np.ones((5, 5), np.uint8)
#膨胀操作
dilated_image = cv2.dilate(threshold_image, kernel, iterations=1)
#显示膨胀后的图像
cv2.imshow('Dilated Image', dilated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
9. 图像直方图均衡化:
import cv2
#读取图像
image = cv2.imread('image.jpg')
#灰度化处理
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#直方图均衡化
equalized_image = cv2.equalizeHist(gray_image)
#显示直方图均衡化后的图像
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
万能工具箱(视频转化为图片;边缘检测;颜色调试)
import cv2
import os
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor, as_completed
def process_frame(frame_data, output_folder, save_as_grayscale=True, perform_edge_detection=False):
index, image = frame_data
#转换为灰度图像
if save_as_grayscale:
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#边缘检测
if perform_edge_detection:
image = cv2.Canny(image, 100, 200) # 这里使用Canny边缘检测器,可以根据需要选择其他方法
#生成图像文件名,保存图像
image_path = os.path.join(output_folder, f"frame_{index}.png")
cv2.imwrite(image_path, image)
def video_to_frames_with_progress_multi_thread(video_path, output_folder, num_threads=4, interval_seconds=None,
save_as_grayscale=True, perform_edge_detection=False):
"""
将视频转换为图像帧,并支持多线程保存。
参数:
- video_path:视频文件路径
- output_folder:图像保存的文件夹路径
- num_threads:保存图像时使用的线程数
- interval_seconds:按秒间隔获取图像帧的时间间隔,设置为None则按每一帧获取
- save_as_grayscale: 是否以灰度图像保存
- perform_edge_detection: 是否进行边缘检测
"""
#打开视频文件
vidcap = cv2.VideoCapture(video_path)
#创建输出文件夹(如果不存在)
os.makedirs(output_folder, exist_ok=True)
#获取视频帧率
fps = int(vidcap.get(cv2.CAP_PROP_FPS))
#计算间隔帧数
if interval_seconds:
interval_frames = int(fps * interval_seconds)
else:
interval_frames = 1
#获取视频帧数
total_frames = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT))
#使用tqdm创建进度条
with tqdm(total=total_frames, bar_format="{l_bar}{bar}{r_bar}") as pbar: # 设置进度条格式,去掉了颜色
frames = []
index = 0
while True:
success, image = vidcap.read()
if success:
if interval_seconds is None or interval_seconds and index % interval_frames == 0:
frames.append((index, image))
index += 1
pbar.update(1) # 更新进度条
else:
break
#使用线程池进行图像保存
with ThreadPoolExecutor(max_workers=num_threads) as executor:
futures = [executor.submit(process_frame, frame, output_folder, save_as_grayscale, perform_edge_detection)
for frame in frames]
# 等待所有线程完成
for _ in tqdm(as_completed(futures), total=len(futures), ncols=80):
pass
#关闭视频文件
vidcap.release()
#使用示例
video_to_frames_with_progress_multi_thread('video.mp4', 'output_folder', num_threads=4, interval_seconds=None,
save_as_grayscale=True, perform_edge_detection=True)
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典