在对象检测后更改矩形的大小
change size of rectangle after object detection
我使用以下代码进行对象检测。
int main(int argc, char* argv[]){
VideoCapture cap(0);
if (!cap.isOpened()){
cout << "Cannot open the video cam" << endl;
return -1;}
int totalFrameNumber = cap.get(CV_CAP_PROP_FRAME_COUNT);
Mat frame;
namedWindow("MyVideo", CV_WINDOW_AUTOSIZE);
while (1)
{
bool bSuccess = cap.read(frame); // read a new frame from video
if (!bSuccess)
{
cout << "Cannot read a frame from video stream" << endl;
break;
}
Mat frame2;
Rect rectangle2(420,280, 40, 40);
rectangle(frame, rectangle2, Scalar(255, 255, 255));
Mat cornerstrength;
cornerHarris(frame, cornerstrength, 3, 3, 0.1);
//threshold the corner strength
Mat harriscorners;
double th = 0.00001;
threshold(cornerstrength, harriscorners, th, 255, THRESH_BINARY);
morphologyEx(harriscorners, harriscorners, MORPH_CLOSE, Mat(), Point(-1, -1), 6);
//local maxima detection
Mat dilated, localMax;
dilate(cornerstrength, dilated, Mat());
compare(cornerstrength, dilated, localMax, CMP_EQ);
threshold(cornerstrength, harriscorners, th, 255, THRESH_BINARY);
harriscorners.convertTo(harriscorners, CV_8U);
bitwise_and(harriscorners, localMax, harriscorners);
harriscorners.convertTo(harriscorners, CV_32F);
Mat S(0, 2, CV_32SC1);
//drawing a circle around corners
for (int j = 0;j < harriscorners.rows;j++)
for (int i = 0;i < harriscorners.cols;i++)
{
if (harriscorners.at<float>(j, i)> 0)
{ circle(frame, Point(i, j), 5, Scalar(255), 2, 8);
Mat pt(1, 2, CV_32SC1);
pt.at<int>(1, 0) = i;
pt.at<int>(0, 1) = j;
// Add the point to S
S.push_back(pt);
for (int x = 430; x < 460; x++)
for (int y = 285; y < 315; y++)
if ((pt.at<int>(1, 0) = i) == x && (pt.at<int>(0, 1) = j) == y))
{
Rect rectangle2(430, 285, 30,30);}}}
imshow("MyVideo", frame);
if (waitKey(30) == 27)
{
cout << "esc key is pressed by user" << endl;
break;
}
}
return 0;
}
我想要条件 if((pt.at(1,0(= i(== x&amp;&amp;(pt.at(0,1(= j(== y((是建立的,然后是从 Rectangle2(420,280,40,40(更改为 rectangle2(430,285,30,30(。新的矩形2(显示在图片中。但是我想显示Onle new Rectangle22.您有任何解决问题吗?非常感谢..
正如我在评论中所说的那样,您需要创建一个克隆并保持框架几乎恒定。
所以,在这部分中:
Rect rectangle2(420,280, 40, 40);
rectangle(frame, rectangle2, Scalar(255, 255, 255));
Mat cornerstrength;
cornerHarris(frame, cornerstrength, 3, 3, 0.1);
写一些类似这样的东西
cv::Mat frameCopy = frame.clone();
Rect rectangle2(420,280, 40, 40);
rectangle(frameCopy , rectangle2, Scalar(255, 255, 255));
Mat cornerstrength;
cornerHarris(frameCopy , cornerstrength, 3, 3, 0.1);
然后,在这部分中,我不确定它打算做什么
for (int x = 430; x < 460; x++)
for (int y = 285; y < 315; y++)
if ((pt.at<int>(1, 0) = i) == x && (pt.at<int>(0, 1) = j) == y))
{
Rect rectangle2(430, 285, 30,30);
}
}
}
imshow("MyVideo", frame);
,但您可能想用新的矩形显示新图像,因此您可以再次执行此操作:
cv::Mat anotherCopy= frame.clone();
Rect rectangleInLoop(430,280,30,30);
rectangle(anotherCopy, rectangleInLoop, Scalar(255, 255, 255));
imshow("MyVideo", anotherCopy);
相关文章:
- 检测 COFF 对象文件中C++内联符号
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- C++中的张量流对象检测
- 如何检测图像中的特定对象
- 微调张量流对象检测预训练模型
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 在对象检测后更改矩形的大小
- 使用感兴趣区域的等值线进行对象检测
- 是否有适用于张量流对象检测 API 的C++包装器
- C++圆形区域中的 Opencv 对象检测
- DLIB C++对象检测实例训练真的很慢
- OpenCV的对象检测项目
- 'weight'参数在 Open CV 对象检测中的含义是什么
- 使用OpenCV进行对象检测和隔离
- 使用简单的BlobDetector进行对象检测,但它不起作用
- iOS上的OpenCV对象检测(HOGDescriptor)
- 与CPU版本相比,OpenCV GPU对象检测速度慢,检测次数少
- 在OpenCV中使用GPU进行对象检测的HOG功能
- 如何在图像处理中提取模式识别算法中的特定特征以进行对象检测
- 在eclipse上使用c/c++中的opencv进行对象检测