ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. 安装 OpenCV-Python
  • 2. 基本图像操作
    • 读取和显示图像
    • 图像属性
  • 3. 图像处理基础
    • 颜色空间转换
    • 图像阈值处理
    • 图像滤波
  • 4. 图像几何变换
    • 缩放
    • 旋转
    • 仿射变换
  • 5. 边缘检测和特征提取
    • Canny 边缘检测
    • 轮廓检测
    • 特征点检测
  • 6. 视频处理
    • 读取视频
    • 保存视频
  • 7. 人脸检测示例
  • 8. 实用技巧
    • 图像混合
    • 绘制图形和文字
    • 鼠标事件处理
  • 9. 性能优化
    • 计算代码执行时间
    • 使用 GPU 加速
  • 10. 实际应用案例
    • 二维码检测
    • 图像拼接(全景图)

OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软件库,而 OpenCV-Python 是 OpenCV 的 Python 接口。

1. 安装 OpenCV-Python #

pip install opencv-python  # 基础模块
pip install opencv-contrib-python  # 包含额外贡献模块的完整版

2. 基本图像操作 #

读取和显示图像 #

import cv2

# 读取图像
img = cv2.imread('image.jpg')  # 返回 NumPy 数组

# 显示图像
cv2.imshow('Image Window', img)
cv2.waitKey(0)  # 等待任意按键
cv2.destroyAllWindows()  # 关闭所有窗口

# 保存图像
cv2.imwrite('output.jpg', img)

图像属性 #

print(type(img))  # <class 'numpy.ndarray'>
print(img.shape)  # (高度, 宽度, 通道数)
print(img.size)   # 像素总数
print(img.dtype)  # 数据类型

3. 图像处理基础 #

颜色空间转换 #

# BGR 转灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# BGR 转 HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

图像阈值处理 #

# 简单阈值
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 自适应阈值
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                              cv2.THRESH_BINARY, 11, 2)

图像滤波 #

# 高斯模糊
blur = cv2.GaussianBlur(img, (5,5), 0)

# 中值滤波
median = cv2.medianBlur(img, 5)

# 双边滤波(保边去噪)
blur = cv2.bilateralFilter(img, 9, 75, 75)

4. 图像几何变换 #

缩放 #

resized = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

旋转 #

(h, w) = img.shape[:2]
center = (w//2, h//2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)  # 旋转45度
rotated = cv2.warpAffine(img, M, (w, h))

仿射变换 #

pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(img, M, (cols,rows))

5. 边缘检测和特征提取 #

Canny 边缘检测 #

edges = cv2.Canny(img, 100, 200)  # 最小阈值100,最大阈值200

轮廓检测 #

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 3)

特征点检测 #

# SIFT 特征点
sift = cv2.SIFT_create()
keypoints = sift.detect(gray, None)
img_kp = cv2.drawKeypoints(img, keypoints, None)

# ORB 特征点
orb = cv2.ORB_create()
keypoints = orb.detect(img, None)
keypoints, descriptors = orb.compute(img, keypoints)

6. 视频处理 #

读取视频 #

cap = cv2.VideoCapture('video.mp4')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 处理帧
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', gray)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

保存视频 #

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    out.write(frame)

out.release()

7. 人脸检测示例 #

# 加载预训练的人脸检测模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

# 绘制矩形框
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

8. 实用技巧 #

图像混合 #

dst = cv2.addWeighted(img1, 0.7, img2, 0.3, 0)

绘制图形和文字 #

# 绘制直线
cv2.line(img, (0,0), (511,511), (255,0,0), 5)

# 绘制矩形
cv2.rectangle(img, (384,0), (510,128), (0,255,0), 3)

# 绘制圆形
cv2.circle(img, (447,63), 63, (0,0,255), -1)

# 添加文字
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10,500), font, 4, (255,255,255), 2, cv2.LINE_AA)

鼠标事件处理 #

def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img,(x,y),100,(255,0,0),-1)

cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)

9. 性能优化 #

计算代码执行时间 #

e1 = cv2.getTickCount()
# 你的代码
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()

使用 GPU 加速 #

# 检查是否有可用的 CUDA
print(cv2.cuda.getCudaEnabledDeviceCount())

# 将图像上传到 GPU
gpu_img = cv2.cuda_GpuMat()
gpu_img.upload(img)

# 在 GPU 上处理
gpu_gray = cv2.cuda.cvtColor(gpu_img, cv2.COLOR_BGR2GRAY)

# 下载回 CPU
gray = gpu_gray.download()

10. 实际应用案例 #

二维码检测 #

detector = cv2.QRCodeDetector()
data, bbox, straight_qrcode = detector.detectAndDecode(img)
if bbox is not None:
    print(f"QR Code data: {data}")

图像拼接(全景图) #

stitcher = cv2.Stitcher_create()
status, panorama = stitcher.stitch([img1, img2, img3])
if status == cv2.Stitcher_OK:
    cv2.imshow('Panorama', panorama)

OpenCV-Python 是一个功能强大的计算机视觉库,广泛应用于图像处理、视频分析、机器学习、增强现实等领域。通过 Python 接口,开发者可以方便地利用 OpenCV 的强大功能进行快速原型开发。

访问验证

请输入访问令牌

Token不正确,请重新输入