draw a BoundingBox around an object that detection by Harris corners

asked 2017-07-09 11:21:32 -0600

louis89 gravatar image

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;
}
edit retag flag offensive close merge delete

Comments

1

do you understand, that keypoint detection does not know anything about "objects" ?

berak gravatar imageberak ( 2017-07-09 12:49:42 -0600 )edit

thanks berak but do yo have any idea to help me?

louis89 gravatar imagelouis89 ( 2017-07-09 13:27:41 -0600 )edit

well, no. because you misunderstood it in the 1st place

berak gravatar imageberak ( 2017-07-09 13:34:59 -0600 )edit

again, you're already wrong here:

I use below code (Harris Corners) for object detection.

this will NEVER do any object detection.

berak gravatar imageberak ( 2017-07-09 23:28:07 -0600 )edit