OpenCV介绍

OpenCV是一款由Intel公司俄罗斯团队发起并参与和维护的一个计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多算法,并且正在日益扩展

OpenCV的优势

  1. 编程语言

    OpenCV基于C++实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV C++ API和Python语言的最佳特性。

  2. 跨平台

    可以在不同的系统平台上使用,包括Windows,Linux,OS X,Android和iOS。基于CUDA和OpenCL的高速GPU操作接口也在积极开发中

  3. 活跃的开发团队

  4. 丰富的API

    完善的传统计算机视觉算法,涵盖主流的机器学习算法,同时添加了对深度学习的支持。

OpenCV-Python

OpenCV-Python是一个Python绑定库,旨在解决计算机视觉问题。

Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和代码可读性。它使程序员能够用更少的代码行表达思想,而不会降低可读性。

与C / C++等语言相比,Python速度较慢。Python可以使用C / C++扩展,这使我们可以在C / C++中编写计算密集型代码,并创建可用作Python模块的Python包装器。这给我们带来了两个好处:首先,代码与原始C / C++代码一样快(因为它是在后台工作的实际C++代码),其次,在Python中编写代码比使用C / C++更容易。OpenCV-Python是原始OpenCV C++实现的Python包装器。

OpenCV-Python使用Numpy,这是一个高度优化的数据库操作库,具有MATLAB风格的语法。所有OpenCV数组结构都转换为Numpy数组。这也使得与使用Numpy的其他库(如SciPy和Matplotlib)集成更容易。

安装opencv-python

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

opencv基础的图像操作

1.读取图像

cv2.imread(path,[读取方式])

参数:

  • path:要读取的图像路径
  • 读取方式的标志(彩色-默认,灰色等等)

参考代码:

import numpy as np
import cv2
img = cv2.imread('demo.jpg')

2.显示图像

cv2.imshow(arg1,arg2)
参数:
arg1:显示图像的窗口名称,以字符串类型表示
arg2:要加载的图像

注意:在调用显示图像的API后,要调用cv2.waitKey(0)给图像绘制留下时间,否则窗口会出现无响应情况,并且图像无法显示出来

import numpy as np
import cv2 
img = cv2.imread('demo.jpg')
cv2.imshow("img",img)
cv2.waitkey(0)

3.保存图像

cv2.imwrite(arg1,arg2)

参数:

  • arg1:文件名,要保存在哪里
  • arg2:要保存的图像
import numpy as np
import cv2 
img = cv2.imread('1.jpg')
cv2.imshow("img",img)
cv2.imwrite("2.jpg",img)
cv2.waitkey(0)

绘制几何图形

1.绘制直线

cv2.line(img,start,end,color,thickness)

参数:

  • img:要绘制直线的图像
  • Start,end: 直线的起点和终点
  • color: 线条的颜色
  • Thickness: 线条宽度
import cv2
import numpy as np
img = cv2.imread('./demo.png')
cv2.line(img, (100, 100), (200, 200), (255, 0, 0), 2)
cv2.imshow("img", img)
cv2.waitKey(0)

2.绘制圆形

cv.circle(img,centerpoint, r, color, thickness)

参数:

  • img:要绘制圆形的图像
  • Centerpoint圆心
  • r: 半径
  • color: 线条的颜色
  • Thickness: 线条宽度,为-1时生成闭合图案并填充颜色
import cv2
import numpy as np
img = cv2.imread('./demo.png')
cv2.line(img, (100, 100), (200, 200), (255, 0, 0), 2)
cv2.circle(img, (300, 300), 50, (0, 255, 255), 2)
cv2.imshow("img", img)
cv2.waitKey(0)

3.绘制矩形

cv.rectangle(img,leftupper,rightdown,color,thickness)

参数:

  • img:要绘制矩形的图像
  • Leftupper, rightdown: 矩形的左上角和右下角坐标
  • color: 线条的颜色
  • Thickness: 线条宽度
import cv2
import numpy as np
img = cv2.imread('./demo.png')
cv2.line(img, (100, 100), (200, 200), (255, 0, 0), 2)
cv2.circle(img, (300, 300), 50, (0, 255, 255), 2)
cv2.rectangle(img, (100,200), (300, 300), (255, 0, 0), 2)
cv2.imshow("img", img)
cv2.waitKey(0)

4.向图像中添加文字

cv.putText(img,text,station, font, Fontscale ,color,thickness,cv2.LINE_AA)

参数:

  • img: 图像

  • text:要写入的文本数据

  • station:文本的放置位置

  • font:字体样式

  • Fontscale :字体大小

  • thickness字体线条宽度

  • cv2.LINE_AA

    最后一个参数 cv2.LINE_AA 表示使用反走样(Anti-Aliasing)技术来绘制文本边框。

    • 反走样是一种提高图形质量的技术,它通过混合颜色和像素边缘以减少锯齿状效果,使文本看起来更加平滑、清晰。
    • 在 OpenCV 中,cv2.LINE_AA 是一种高级线条类型,用于实现文本边界的高质量渲染。相比于其他线型如 cv2.LINE_8(默认值),它能提供更好的视觉效果,特别是在文本较小或者需要高精度显示的情况下
import cv2
import numpy as np
img = cv2.imread('./demo.png')
cv2.putText(img, 'Hello', (100, 200), cv2.FONT_ITALIC, 1, (255, 255, 0), 4, cv2.LINE_AA)
cv2.putText(img, '666', (100, 600), cv2.FONT_ITALIC, 1, (255, 255, 0))
cv2.imshow("img", img)
cv2.waitKey(0)

5.获取并修改图像中的像素点

import cv2
img = cv2.imread('1.jpg')
# 获取某个像素点的值
px = img[100,100]
print(px)
# 修改某个位置的像素值
img[100,100] = [0,0,255]
cv2.imshow("img",img)
cv2.waitKey(0)

6.捕获摄像头的实时视频流

cap = cv2.VideoCapture(path)

path视频流资源路径设置为0代表从默认摄像头捕获视频流

ret, frame = cap.read()

返回值cap 调用read()方法可以得到一个布尔值和一帧图像。布尔值表示是否成功读取到帧,如果为False,可能是因为视频结束或读取失败;如果为True,第二项则是当前帧的图像数据。

import cv2

# 创建VideoCapture对象,参数为摄像头索引(通常为0,如果是单一摄像头)
cap = cv2.VideoCapture(0)

while True:
    # 读取一帧视频
    ret, frame = cap.read()

    # 检查读取是否成功
    if not ret:
        break

    # 在这里处理或显示帧(例如,显示原始帧)
    cv2.imshow('Camera Feed', frame)

    # 按'q'键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头资源并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐