Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

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;
}