7 OpenCV 目标检测

本文介绍了在图像处理中,霍夫变换作为检测直线的关键技术。霍夫变换最初用于检测直线,但随着发展,现在能检测包括圆形、椭圆在内的多种规则形状。通过将图像像素从一个坐标系转换到另一个,霍夫变换可以将形状检测转化为查找峰值问题,从而有效地识别图像中的目标位置和形状特征。
摘要由CSDN通过智能技术生成

首页




图像中物体的形状信息是较为明显和重要的信息,可以通过对形状的识别实现对物体的检测,因此,检测图像中某些规则的形状是图像处理的重要方法.通过检测形状确定目标的位置,并通过对目标的大小,位置等信息的处理进一步理解图像中的重要信息.




直线检测
霍夫变换 (Hough Transform)是图像处理中检测是否存在直线的重要方法,该算法是由Paul Hough在1962年首次提出的,最开始只能检测图像中的直线,但是霍夫变换经过不断扩展和完善,已经可以检测多种规则形状,例如圆形,椭圆等.霍夫变换通过把图像中的像素在一个空间坐标系中变换到另一个空间坐标系中,使得在原空间中具有相同特性的曲线或者直线映射到另一个空间中形成峰值,从而把检测任意形状的问题转化为统计峰值的问题.

/**
 * @author IYATT-yx
 * @date 2021-2-10
 * @brief 直线检测
 */
#include "opencv2/opencv.hpp"
#include <iostream>
#include <vector>
#include <cmath>

/**
 * @brief 直线绘制
 * @param img 要标记直线的图像
 * @param lines 检测到的直线数据
 * @param rows 图像的高度
 * @param cols 图像的宽度
 * @param scalar 直线的颜色
 * @param n 绘制直线的线宽
 */
void drawLine(cv::Mat &img, std::vector<cv::Vec2f> lines, double rows, double cols, cv::Scalar scalar, int n)
{
   
	cv::Point pt1, pt2;
	for (size_t i = 0; i < lines.size(); ++i)
	{
   
		// 直线距离坐标原点的距离
		float rho = lines[i][0];
		// 直线与坐标原点的垂线与x轴的夹角
		float theta = lines[i][1];
		// 夹角的余弦
		double cosValue = cos(theta);
		// 夹角的正弦
		double sinValue = sin(theta);
		// 直线与过坐标原点的垂线的交点
		double x0 = rho * cosValue, y0 = rho * sinValue;
		// 图像高宽的最大值
		double length = cv::max(rows, cols);
		// 计算直线上的一点
		pt1.x = cvRound(x0 + length * (-sinValue));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值