Python:设计师的宝藏来了,尤其是最后一个

计算机视觉是人工智能领域中的重要分支,而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所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值