C++ opencv学习,急,有偿

想使用C++ 和opencv打开摄像头并对一个特定小铁球进行识别并输出对象坐标,请问该如何实现?
void Video() {

VideoCapture capture(1);
if (!capture.isOpened()) { //test cam
    cout << "cam open error" << endl;
    
}

while (true) { // cycle frame


    Mat frame;
    capture >> frame;
    imshow("cam", frame);
    waitKey(30);    //延时30


}

}
int main(int argc, char *argv[]) {

thread th = thread(Video);
th.detach();
    return 0;

}

调用OpenCV的接口findContours,drawContours来识别小铁球的轮廓,然后将其坐标点打印出来。
具体可参考
opencv中关于轮廓检测识别Contours及相关函数的介绍_阿Guo的博客-CSDN博客_轮廓识别

设置鼠标回调函数。

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void mouse_callback(int event, int x, int y, int flag, void* userdata)         //回调函数
{
    cout << event << " " << x << " " << y << " " << flag << " "<< endl;          //打印函数.
}

int main()
{
      VideoCapture  cap;
        Max fram;
       cap >> fram;
       VideoCapture  cap(0); 
                               
    namedWindow("鼠标事件",WINDOW_NORMAL);
    setMouseCallback("鼠标事件", mouse_callback);          //设置鼠标回调函数
    while (1)
    {        cap.read(fram);  
        
        imshow("视频", fram);
        if (waitKey(100) == 27)break;                      //展示帧率
    }
    cout << "程序退出:" << endl;
    destroyAllWindows();
    return 0;
}


请看👉 :C++学习之OpenCV入门篇。

首先,捕捉摄像头的图像,然后分成两个步骤,第一,先识别出它的轮廓线,第二,判断轮廓线里边的球的轮廓再标致坐标

include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include

using namespace cv;
using namespace std;

int main()
{
char c = 0;
VideoCapture capture(0);//打开摄像头
while(1)
{
Mat frame;
capture >>frame;
Mat midImage;
cvtColor(frame,midImage, CV_BGR2GRAY);//转化为灰度图
GaussianBlur( midImage, midImage, Size(9, 9), 2, 2 );//进行霍夫圆变换
vector circles;
HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 10, 200, 100, 0, 0 );//霍夫圆变换
for( size_t i = 0; i < circles.size(); i++ )
{
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);//绘制圆心
circle( frame, center, 3, Scalar(0,255,0), -1, 8, 0 );//打印圆心坐标
circle( frame, center, radius, Scalar(255,50,255), 3, 8, 0 );//绘制圆轮廓
printf("x = %d,y = %d\n",cvRound(circles[i][0]),cvRound(circles[i][1]));}
namedWindow("检测结果");
imshow("检测结果", frame);
c = cvWaitKey(30);
if (c == 27)
{
break;
}
}
return 0;
}