gpt4 book ai didi

c++ - 裁剪并显示我从Haar Cascade获得的图像

转载 作者:行者123 更新时间:2023-12-02 10:31:09 26 4
gpt4 key购买 nike

我已经训练了Haar级联,现在我需要处理已建立的对象。我如何从原始图像中裁剪并在新窗口中显示?(如果我在图像上发现2个对象,则显示多个窗口)。这是我的代码(opencv版本2.4.13):

    #include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;

int main(void)
{
CascadeClassifier trafficLightCascader;
string Cascade_name = "TrafficLight.xml";

if (!trafficLightCascader.load(Cascade_name))
{
cout << "Can't load the face feature data" << endl;
return -1;
}

vector<Rect> trafficLights;

Mat src = imread("6копия.png");
CvRect AssignRect = Rect(0, 0, src.cols, src.rows / 2);
Mat srcImage = src(AssignRect);

Mat grayImage(srcImage.rows, srcImage.cols, CV_8UC1);

cvtColor(srcImage, grayImage, CV_BGR2GRAY);
equalizeHist(grayImage, grayImage);

trafficLightCascader.detectMultiScale(grayImage, trafficLights, 1.1, 1, 0, Size(3,3));

for (int i = 0; i < trafficLights.size(); ++i)
{
rectangle(src, trafficLights[i], Scalar(0, 255, 0), 2, 8, 0);
}

imshow("src", src);
waitKey(0);


return 0;}

最佳答案

您的trafficLights vector包含找到的对象的每个矩形的数据。您只需要获取每个矩形的左和上坐标,宽度和高度,就已经有了它们。您需要做的是通过创建每个矩形的Mat格式并显示在不同的帧中来裁剪每个矩形。

您可以检查here以了解有关裁剪的更多信息。

这是您需要的代码:

for (int i = 0; i < trafficLights.size(); ++i)
{
Rect crop_found(trafficLights[i].x,trafficLights[i].y, trafficLights[i].width, trafficLights[i].height);

Mat found(src, crop_found);

imshow(to_string(i),found);

rectangle(src, trafficLights[i], Scalar(0, 255, 0), 2, 8, 0);
}

关于c++ - 裁剪并显示我从Haar Cascade获得的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62203928/

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