draw a BoundingBox around an object that detection by Harris corners
I use below code (Harris Corners) for object detection.I want when an object put in rectangle(420,280, 70, 70) than draw a BoundingBox around the object so that the whole object is placed in the rectangle.the size of object is unknown but is small.I would appreciate it if you help me to do this.Thanks a lot.
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, 70, 70);
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 = 420; x < 490; x++)
for (int y = 280; y < 350; y++)
if ((pt.at<int>(1, 0) = i) == x && (pt.at<int>(0, 1) = j) == y))
cout<<'louis89'<<endl;
imshow("MyVideo", frame);
if (waitKey(30) == 27) {
cout << "esc key is pressed by user" << endl;
break; }}
return 0;
}
do you understand, that keypoint detection does not know anything about "objects" ?
thanks berak but do yo have any idea to help me?
well, no. because you misunderstood it in the 1st place
again, you're already wrong here:
this will NEVER do any object detection.