opencv—常用函数学习_“干货“_12

目录

三二、直方图

计算图像的直方图 (calcHist)

比较两个直方图的相似度 (compareHist)

计算反向投影 (calcBackProject)

解释

三三、图像特征

SIFT 特征检测和描述

ORB 特征检测和描述

Harris 角点检测

HOG 特征描述

解释

http://t.****img.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)

散的正在一部分一部分发,不需要VIP。

资料整理不易,有用话给个赞和收藏吧。


三二、直方图

        在OpenCV中,直方图是图像处理中的一个重要工具,用于表示图像中像素值的分布情况。常用的直方图函数包括 calcHistcompareHistcalcBackProject。下面介绍这些函数及其使用示例。

直方图函数
calcHist compareHist calcBackProject
计算图像的直方图 比较两个直方图的相似度 计算反向投影

计算图像的直方图 (calcHist)
import cv2
import numpy as np
from matplotlib import pyplot as plt

# 读取图像并转换为灰度图
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)

# 计算直方图
hist = cv2.calcHist([image], [0], None, [256], [0, 256])

# 绘制直方图
plt.plot(hist)
plt.title('Grayscale Histogram')
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.show()
比较两个直方图的相似度 (compareHist)
# 读取两幅图像并转换为灰度图
image1 = cv2.imread('path_to_image1.jpg', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('path_to_image2.jpg', cv2.IMREAD_GRAYSCALE)

# 计算直方图
hist1 = cv2.calcHist([image1], [0], None, [256], [0, 256])
hist2 = cv2.calcHist([image2], [0], None, [256], [0, 256])

# 归一化直方图
hist1 = cv2.normalize(hist1, hist1)
hist2 = cv2.normalize(hist2, hist2)

# 比较直方图
similarity = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
print('Histogram similarity:', similarity)
计算反向投影 (calcBackProject)
# 读取图像并转换为HSV色彩空间
image = cv2.imread('path_to_image.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 选择感兴趣的区域(ROI)
roi = hsv[100:200, 100:200]

# 计算ROI的直方图
roi_hist = cv2.calcHist([roi], [0, 1], None, [180, 256], [0, 180, 0, 256])
roi_hist = cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)

# 计算反向投影
back_project = cv2.calcBackProject([hsv], [0, 1], roi_hist, [0, 180, 0, 256], 1)

# 显示反向投影结果
cv2.imshow('Back Projection', back_project)
cv2.waitKey(0)
cv2.destroyAllWindows()

解释

  • calcHist函数:计算图像的直方图。参数说明:
    • [image]:输入图像,必须用方括号括起来。
    • [0]:使用的通道,灰度图为0。
    • None:没有使用掩码。
    • [256]:直方图的大小。
    • [0, 256]:像素值的范围。
  • compareHist函数:比较两个直方图的相似度。常用的相似度度量方法包括:
    • cv2.HISTCMP_CORREL:相关性。
    • cv2.HISTCMP_CHISQR:卡方。
    • cv2.HISTCMP_INTERSECT:交集。
    • cv2.HISTCMP_BHATTACHARYYA:Bhattacharyya距离。
  • calcBackProject函数:计算反向投影。反向投影用于在图像中查找与给定直方图相匹配的像素。参数说明:
    • [hsv]:输入图像,必须用方括号括起来。
    • [0, 1]:使用的通道。
    • roi_hist:感兴趣区域的直方图。
    • [0, 180, 0, 256]:像素值的范围。
    • 1:缩放因子。

        通过这些示例,可以看到如何使用OpenCV中的直方图函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现图像的分析和处理任务。

三三、图像特征

        在OpenCV中,图像特征检测和描述是计算机视觉中的一个重要领域,用于图像匹配、物体识别、图像拼接等任务。下面介绍一些常用的图像特征检测和描述算法及其使用示例。

像特征检测和描述算法
HOG(Histogram of Oriented Gradients) LBP(Local Binary Patterns) SIFT(Scale-Invariant Feature Transform) SURF(Speeded-Up Robust Features)
方向梯度直方图 局部二值模式 尺度不变特征变换 加速鲁棒特征
FAST(Features from Accelerated Segment Test) ORB(Oriented FAST and Rotated BRIEF) BRISK(Binary Robust Invariant Scalable Keypoints) MSER(Maximally Stable Extremal Regions)
加速分割测试特征 方向FAST和旋转BRIEF 二进制鲁棒可扩展关键点 最大稳定极值区域
Star BRIEF(Binary Robust Independent Elementary Features) FREAK(Fast Retina Keypoint) cornerHarris
星形特征检测器 二进制鲁棒独立基本特征 快速视网膜关键点 Harris角点检测
preCornerDetect LineSegmentDetector FastLineDetector goodFeaturesToTrack
预角点检测 线段检测器 快速线段检测器 检测好特征点

SIFT 特征检测和描述
import cv2

# 读取图像并转换为灰度图
image = cv2.imread('path_to_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 初始化SIFT检测器
sift = cv2.SIFT_create()

# 检测SIFT特征点并计算描述子
keypoints, descriptors = sift.detectAndCompute(gray, None)

# 在图像上绘制特征点
image_with_keypoints = cv2.drawKeypoints(image, keypoints, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# 显示结果
cv2.imshow('SIFT Keypoints', image_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
ORB 特征检测和描述
# 初始化ORB检测器
orb = cv2.ORB_create()

# 检测ORB特征点并计算描述子
keypoints, descriptors = orb.detectAndCompute(gray, None)

# 在图像上绘制特征点
image_with_keypoints = cv2.drawKeypoints(image, keypoints, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# 显示结果
cv2.imshow('ORB Keypoints', image_with_keypoints)
cv2.waitKey(0)
cv2.destroyAllWindows()
Harris 角点检测
# Harris角点检测
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)

# 结果通过阈值化标记角点
image[dst > 0.01 * dst.max()] = [0, 0, 255]

# 显示结果
cv2.imshow('Harris Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
HOG 特征描述
# 初始化HOG描述子
hog = cv2.HOGDescriptor()

# 计算HOG描述子
hog_features = hog.compute(gray)

print("HOG Features:", hog_features)

解释

  • HOG:用于特征描述,常用于行人检测等任务。
  • LBP:用于纹理特征描述,适合纹理分析。
  • SIFTSURF:用于特征检测和描述,具有尺度和旋转不变性。
  • FASTORB:用于快速特征检测和描述,ORB是基于FAST和BRIEF的改进。
  • BRISKMSERStarBRIEFFREAK:用于特征检测和描述的不同算法。
  • cornerHarrispreCornerDetect:用于角点检测。
  • LineSegmentDetectorFastLineDetector:用于线段检测。
  • goodFeaturesToTrack:用于检测图像中的好特征点。

通过这些示例代码,可以看到如何使用OpenCV中的各种图像特征检测和描述算法来处理图像。根据具体的应用需求,可以灵活运用这些算法来实现复杂的图像处理和分析任务。

上一篇:Qt QProcess 进程间通信读写数据通信


下一篇:Spring AI 应用开发中设置访问 Ollama 的超时时间