减少for循环的次数
reduce number of for loop
我写了一个检测行人的代码。代码完全可以工作,但是正如您在下面的代码中看到的,有许多for循环。我的问题是如何在不影响输出的情况下减少for循环的数量。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
void detectAndDisplay( Mat frame );
/** Global variables */
CascadeClassifier pedestrians_cascade;
Mat image1,image2,image3,image4,image5,image6,image7,image8,image9,image10;
Mat ped1,ped2,ped3,ped4,ped5,ped6,ped7,ped8,ped9,ped10;
int x;
int y;
int width, height;
int main( )
{
// Load Face cascade (.xml file)
pedestrians_cascade = CascadeClassifier("hogcascade_pedestrians.xml");
// Read an images
image1 = imread("ped1.jpg");
image2 = imread("ped2.jpg");
image3 = imread("ped3.jpg");
image4 = imread("ped4.jpg");
image5 = imread("ped5.jpg");
image6 = imread("ped6.jpg");
image7 = imread("ped7.jpg");
image8 = imread("ped8.jpg");
image9 = imread("ped9.jpg");
image10 = imread("ped10.jpg");
// these functions use to draw rectangles
std::vector<Rect> ped1;
pedestrians_cascade.detectMultiScale( image1, ped1, 1.1, , 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped1.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped1[i].x, ped1[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped1[i].x + ped1[i].width), (ped1[i].y + ped1[i].height));
//rectangle(image1, ped1[i], Scalar(255, 0 , 0), 2, 8, 0);
rectangle(image1,pt2,pt1, Scalar(255,0,0), 2,8,0);
}
std::vector<Rect> ped2;
pedestrians_cascade.detectMultiScale( image2, ped2, 1.1, 5, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped2.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped2[i].x, ped2[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped2[i].x + ped2[i].width), (ped2[i].y + ped2[i].height));
rectangle(image2, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped3;
pedestrians_cascade.detectMultiScale( image3, ped3, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped3.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped3[i].x, ped3[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped3[i].x + ped3[i].width), (ped3[i].y + ped3[i].height));
rectangle(image3, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped4;
pedestrians_cascade.detectMultiScale( image4, ped4, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped4.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped4[i].x, ped4[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped4[i].x + ped4[i].width), (ped4[i].y + ped4[i].height));
rectangle(image4, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped5;
pedestrians_cascade.detectMultiScale( image5, ped5, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped5.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped5[i].x, ped5[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped5[i].x + ped5[i].width), (ped5[i].y + ped5[i].height));
rectangle(image5, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped6;
pedestrians_cascade.detectMultiScale( image6, ped6, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped6.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped6[i].x, ped6[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped6[i].x + ped6[i].width), (ped6[i].y + ped6[i].height));
rectangle(image6, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped7;
pedestrians_cascade.detectMultiScale( image7, ped7, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped7.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped7[i].x, ped7[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped7[i].x + ped7[i].width), (ped7[i].y + ped7[i].height));
rectangle(image7, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped8;
pedestrians_cascade.detectMultiScale( image8, ped8, 1.1, 20, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped8.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped8[i].x, ped8[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped8[i].x + ped8[i].width), (ped8[i].y + ped8[i].height));
rectangle(image8, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped9;
pedestrians_cascade.detectMultiScale( image9, ped9, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped9.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped9[i].x, ped9[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped9[i].x + ped9[i].width), (ped9[i].y + ped9[i].height));
rectangle(image9, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
std::vector<Rect> ped10;
pedestrians_cascade.detectMultiScale( image10, ped10, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
for (int i = 0; i < ped10.size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(ped10[i].x, ped10[i].y); // Display detected ped on main window - live stream from camera
Point pt2((ped10[i].x + ped10[i].width), (ped10[i].y + ped10[i].height));
rectangle(image10, pt2, pt1, Scalar(255, 0 , 0), 2, 8, 0);
}
imshow( "ped1", image1);
/*imshow( "ped2", image2);
imshow( "ped3", image3);
imshow( "ped4", image4);
imshow( "ped5", image5);
imshow( "ped6", image6);
imshow( "ped7", image7);
imshow( "ped8", image8);
imshow( "ped9", image9);
imshow( "ped10", image10);*/
waitKey(0);
return 0;
}
为图像和ped
变量创建外部std::vector
:
std::vector<Mat> images(10);
std::vector<vector<Rect> > peds;
// ...
for (unsigned int p = 0; p < 10; ++p)
{
pedestrians_cascade.detectMultiScale( images[p], peds[p],
1.1, 5,
0|CASCADE_SCALE_IMAGE,
Size(30, 30) );
for (int i = 0; i < peds[p].size(); i++) // Iterate through all current elements (detected ped)
{
Point pt1(peds[p][i].x, peds[p][i].y); // Display detected ped on main window - live stream from camera
Point pt2((peds[p][i].x + peds[p][i].width),
(peds[p][i].y + peds[p][i].height));
rectangle(images[p],
pt2, pt1,
Scalar(255, 0 , 0), 2, 8, 0);
}
}
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- C++ Python 循环"for i, num in enumerate(list):"版本
- C 多循环 for () 基础知识
- 没有条件值的 FOR 循环"for (int i = 1; ; i++)"无法正常工作
- 为用户提供循环for循环的选项
- 打破循环for循环