当前位置: 首页 > news >正文

潍坊制作网站用淘宝做公司网站

潍坊制作网站,用淘宝做公司网站,网站建设需求和页面需求怎么提,wordpress docker -vOpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉库,广泛应用于图像处理、视频分析等领域。本文将通过实战代码解析,带你掌握 OpenCV 的核心基础操作,包括图像读写、视频处理、图形绘制、鼠标交互和…

OpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉库,广泛应用于图像处理、视频分析等领域。本文将通过实战代码解析,带你掌握 OpenCV 的核心基础操作,包括图像读写、视频处理、图形绘制、鼠标交互和轨迹栏控制等关键技能。

一、图像基本操作:读取、显示与保存

图像操作是 OpenCV 的基础,以下代码展示了如何读取灰度图像、显示图像,并通过按键交互实现窗口关闭和图像保存功能。

import cv2
import numpy as np# 读取图像,0表示以灰度模式读取
img = cv2.imread("1.jpg", 0)
# 显示图像,第一个参数是窗口名称,第二个是图像数据
cv2.imshow('test', img)
# 等待按键输入,0表示无限等待
key = cv2.waitKey(0)# 按键判断(注意:waitKey返回ASCII码,需用ord()转换)
if key == ord('q'):  # 按q键关闭窗口cv2.destroyAllWindows()
if key == ord('s'):  # 按s键保存图像cv2.imwrite('2.jpg', img)

关键函数解析

  • cv2.imread(path, flag):读取图像,flag=0为灰度图,flag=1为彩色图(默认)
  • cv2.imshow(window_name, img):创建窗口并显示图像
  • cv2.waitKey(delay):等待按键事件,delay=0表示无限等待,返回按键 ASCII 码
  • cv2.imwrite(path, img):保存图像到指定路径
  • cv2.destroyAllWindows():关闭所有 OpenCV 创建的窗口

二、结合 Matplotlib 显示图像

除了 OpenCV 自带的显示功能,还可以结合 Matplotlib 库展示图像,适合需要更丰富绘图功能的场景。

import numpy as np
import cv2
from matplotlib import pyplot as plt# 读取灰度图像
img = cv2.imread('ocv01.jpg', 0)
# 使用matplotlib显示,cmap='gray'确保灰度图正确显示
plt.imshow(img, cmap='gray', interpolation='bicubic')
# 隐藏坐标轴刻度
plt.xticks([]), plt.yticks([])
# 显示图像
plt.show()

注意事项

  • OpenCV 读取的彩色图像默认是 BGR 格式,而 Matplotlib 使用 RGB 格式,若显示彩色图需先转换:img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  • interpolation参数控制插值方式,bicubic(双三次插值)可获得更平滑的显示效果

三、视频处理:捕获与保存

OpenCV 不仅能处理图像,还能直接操作视频流(包括摄像头和视频文件)。

1. 实时摄像头捕获

import cv2
import numpy as np# 打开摄像头,0表示默认摄像头
cap = cv2.VideoCapture(0)while(True):# 读取一帧图像,ret表示是否成功,frame是图像数据ret, frame = cap.read()# 显示帧cv2.imshow('frame', frame)# 按q键退出循环(waitKey(1)表示等待1ms)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()

2. 视频保存

import cv2
import numpy as np# 打开摄像头
cap = cv2.VideoCapture(0)# 定义编码器,'XVID'是常用的视频编码格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 创建视频写入对象:输出路径、编码器、帧率、分辨率
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))while(cap.isOpened()):ret, frame = cap.read()if ret == True:# 翻转帧(0表示上下翻转)frame = cv2.flip(frame, 0)# 写入帧out.write(frame)# 显示帧cv2.imshow('frame', frame)# 按q键退出if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:break# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

核心概念

  • cv2.VideoCapture():用于打开视频源(摄像头 ID 或视频文件路径)
  • fourcc:四字符代码,指定视频编码器(如 'XVID'、'MP4V' 等)
  • cv2.VideoWriter():视频写入对象,需指定输出路径、编码器、帧率和分辨率

四、图形绘制:在图像上绘制基本形状

OpenCV 提供了丰富的绘图函数,可在图像上绘制直线、矩形、圆等基本图形。

import cv2
import numpy as np# 创建512x512的黑色画布(3通道彩色图)
img = np.zeros((512, 512, 3), np.uint8)# 绘制直线:起点(0,0),终点(511,511),颜色(255,0,0)(蓝色),线宽5
cv2.line(img, (0,0), (511,511), (255,0,0), 5)# 绘制矩形:左上角(384,0),右下角(510,128),颜色(0,255,0)(绿色),线宽3
cv2.rectangle(img, (384,0), (510,128), (0,255,0), 3)# 绘制圆:圆心(447,63),半径63,颜色(0,0,255)(红色),-1表示填充
cv2.circle(img, (447,63), 63, (0,0,255), -1)# 绘制椭圆:中心(256,256),长轴100,短轴50,旋转角0,起始角0,结束角180,颜色255,填充
cv2.ellipse(img, (256,256), (100,50), 0, 0, 180, 255, -1)# 绘制文字:内容'OpenCV',位置(10,500),字体,大小1,颜色白色,线宽2,抗锯齿
cv2.putText(img, 'OpenCV', (10,500), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2, cv2.LINE_AA)# 显示绘制结果
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

颜色表示:OpenCV 中颜色以 (B, G, R) 格式表示,如(255,0,0)表示蓝色。

五、鼠标交互:通过鼠标事件绘制图形

OpenCV 支持鼠标事件监听,可实现交互式绘图功能。

import cv2
import numpy as np# 全局变量:绘图状态、模式(矩形/圆形)、起点坐标
drawing = False  # 是否正在绘图
mode = True      # True:矩形,False:圆形
ix, iy = -1, -1  # 起点坐标# 鼠标回调函数
def draw_circle_extensive(event, x, y, flags, param):global drawing, mode, ix, iyif event == cv2.EVENT_LBUTTONDOWN:# 左键按下:开始绘图,记录起点drawing = Trueix, iy = x, yelif event == cv2.EVENT_MOUSEMOVE:# 鼠标移动:如果正在绘图,根据模式绘制if drawing == True:if mode == True:cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)  # 矩形else:cv2.circle(img, (x, y), 5, (0, 0, 255), -1)  # 圆形elif event == cv2.EVENT_LBUTTONUP:# 左键释放:结束绘图,完成最终绘制drawing = Falseif mode == True:cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)else:cv2.circle(img, (x, y), 5, (0, 0, 255), -1)# 创建黑色画布
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')
# 设置鼠标回调函数
cv2.setMouseCallback('image', draw_circle_extensive)while(1):cv2.imshow('image', img)k = cv2.waitKey(20) & 0xFFif k == ord('q'):  # 按q退出breakelif k == ord('m'):  # 按m切换模式mode = not modecv2.destroyAllWindows()

常用鼠标事件

  • EVENT_LBUTTONDOWN:左键按下
  • EVENT_MOUSEMOVE:鼠标移动
  • EVENT_LBUTTONUP:左键释放
  • EVENT_LBUTTONDBLCLK:左键双击

六、轨迹栏控制:通过滑动条交互调整参数

轨迹栏(Trackbar)是 OpenCV 的另一种交互方式,可用于实时调整参数。

import cv2
import numpy as np# 创建黑色画布
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')# 创建轨迹栏:名称、窗口名、最小值、最大值、回调函数
cv2.createTrackbar('B', 'image', 0, 255, lambda x: None)
cv2.createTrackbar('G', 'image', 0, 255, lambda x: None)
cv2.createTrackbar('R', 'image', 0, 255, lambda x: None)# 创建开关轨迹栏
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image', 0, 1, lambda x: None)while(1):cv2.imshow('image', img)k = cv2.waitKey(1) & 0xFFif k == 27:  # 按ESC退出break# 获取轨迹栏当前值r = cv2.getTrackbarPos('R', 'image')g = cv2.getTrackbarPos('G', 'image')b = cv2.getTrackbarPos('B', 'image')s = cv2.getTrackbarPos(switch, 'image')# 根据开关状态设置图像颜色if s == 0:img[:] = 0  # 关闭状态:黑色else:img[:] = [b, g, r]  # 打开状态:设置为轨迹栏指定的颜色cv2.destroyAllWindows()

轨迹栏工作流程

  1. cv2.createTrackbar()创建轨迹栏
  2. cv2.getTrackbarPos()获取当前值
  3. 在循环中实时更新图像,实现参数调整的可视化反馈

总结

本文通过 7 个实战案例,系统介绍了 OpenCV 的核心基础操作,包括:

  • 图像的读取、显示与保存
  • 结合 Matplotlib 展示图像
  • 视频的捕获与保存
  • 基本图形的绘制
  • 鼠标交互绘图
  • 轨迹栏参数控制

这些操作是 OpenCV 应用的基础,掌握后可进一步学习图像处理(如滤波、边缘检测)、目标检测等高级功能。实际使用时,需注意函数参数的正确设置(如颜色通道顺序、坐标系统)和资源的及时释放,以避免内存泄漏。

http://www.dtcms.com/a/430865.html

相关文章:

  • AMQP协议深度解析:消息队列背后的通信魔法
  • CSP-J/S复赛真实考试场景还原与备考策略
  • 攻防世界-Web-inget
  • flex布局学习记录
  • unordered_map和unordered_set的使用以及哈希表的实现
  • Powershell 管理 后台/计划 作业(六)
  • 北京网站建设公司东为企业网络营销方案策划书
  • 四川网站营销seo什么价格网站建设哪家g
  • k8s-pod的镜像升级与回滚
  • Django 从入门到进阶:构建完整的博客系统
  • XYplorer(多标签文件管理器) 多语便携版
  • 哈尔滨公告最新消息枣庄seo推广
  • 从输入网址到网页呈现:深入理解 HTTP 及其背后的网络世界
  • 建设一个网站需要什么软件抖音小程序在哪里找
  • Rust语言简介
  • 【无标题】Heartbeat高可用配置实践
  • 【LangChain】P6 对话记忆完全指南:从原理到实战(中)
  • 怎样才能把网站做好app开发制作软件
  • 石家庄网站建设外包公司工艺品网站模版
  • 【LaTeX】 5 LaTeX 文档类
  • x64dbg下载安装图文教程(附安装包)
  • pthread_create详解:打开多线程编程的大门
  • DFS 详解(C++版)
  • 如何通过企微SCRM实现高效的客户管理与营销策略?
  • 北京网站建设华网天下买送两年wordpress百度地图插件
  • Unity+Blender-03-输出制作Flipbook
  • SpringCloudGateway:像城市交通指挥系统一样的微服务网关
  • 【大模型评估】大模型评估框架 HELM(Holistic Evaluation of Language Models)全解析:原理、工具与实践
  • 做自媒体视频搬运网站网站做友链有行业要求吗
  • Jarvis 算法