gpt4 book ai didi

c++ - 使用 OpenCV 检测红色矩形(或正方形)

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:01 25 4
gpt4 key购买 nike

我是 OpenCv 的新手,我需要检测图像中的红色矩形。

我已经找到了很多关于如何使用 OpenCV 检测红色圆圈的例子,像这样 one .但是,

如何使用 OpenCV 和 C++ 检测红色矩形?

我想和上面的教程一样,识别这个圈子:

enter image description here

但是,我想识别矩形和正方形而不是圆形。我想从最简单的部分开始,接下来我将改变光照条件。

最佳答案

由于您是新手,我建议您使用最简单的方法来检测形状对象,例如矩形。首先,您将应用阈值来分割图像(您可以使用 Canny()),然后使用矩形的 findContours() 提取轮廓,最后使用 approxPolyDP() - 它根据我们指定的精度将轮廓形状近似为具有较少顶点数的另一个形状。它是Douglas-Peucker算法的一个实现。

cv::Mat src = ...;
cv::Mat gray = ...;
cv::Mat bw;
cv::Canny(gray, bw, 800, 850, 5, true); // Modify values for your use-case

std::vector<std::vector<cv::Point>> countours;
cv::findContours(bw.clone(), countours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);

std::vector<cv::Point> approx;
cv::Mat dst = src.clone();

for(int i = 0; i < countours.size(); i++)
{
cv::approxPolyDP(Mat(countours[i]), approx, arcLength(Mat(countours[i]), true) * 0.01, true);


if (approx.size() == 4)
{
double maxCosine = 0;

for (int j = 2; j < 5; j++)
{
double cosine = fabs(angle(approx[j % 4], approx[j - 2], approx[j - 1]));
maxCosine = MAX(maxCosine, cosine);
}

if (maxCosine < 1.2)
{
cv::line(dst, approx.at(0), approx.at(1), cvScalar(0,0,255), 4);
cv::line(dst, approx.at(1), approx.at(2), cvScalar(0,0,255), 4);
cv::line(dst, approx.at(2), approx.at(3), cvScalar(0,0,255), 4);
cv::line(dst, approx.at(3), approx.at(0), cvScalar(0,0,255), 4);
}

}
}

关于c++ - 使用 OpenCV 检测红色矩形(或正方形),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53894492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com