gpt4 book ai didi

opencv - 检测篮球篮球和球跟踪

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:00 27 4
gpt4 key购买 nike

检测篮筐(篮筐)。 To see the samples of "hoop ".

计算 成功尝试(射击)和失败 尝试的次数。我正在使用 opencv。

输入:

  1. 相机位置将是静态
  2. 来自任何移动设备的Portrait 模式视频。

引用:

我尝试了什么:

  1. 能够追踪篮球。仍在寻求更好的解决方案。

结果:

enter image description here

我的代码:

int main () {

VideoCapture vid(path);

if (!vid.isOpened())
exit(-1);
int i_frame_height = vid.get(CV_CAP_PROP_FRAME_HEIGHT);
i_height_basketball = i_height_basketball * I_HEIGHT / i_frame_height;
int fps = vid.get(CV_CAP_PROP_FPS);
Mat mat_black(640, 480, CV_8UC3, Scalar(0, 0, 0));
vector <Mat> vec_frames;
for (int i_push = 0; i_push < I_NO_FRAMES_STORE; i_push++)
vec_frames.push_back(mat_black);

vector <Mat> vec_mat_result;
for (int i_push = 0; i_push < I_RESULT_STORE; i_push++)
vec_mat_result.push_back(mat_black);

int count_frame = 0;
while (true) {
int clk_start = clock();
Mat image, result;
vid >> image;
if (image.empty())
break;

resize(image, image, Size(I_WIDTH, I_HEIGHT));
image.copyTo(vec_mat_result[count_frame % I_RESULT_STORE]);
if (count_frame >= 1)
vec_mat_result[(count_frame - 1) % I_RESULT_STORE].copyTo(result);
GaussianBlur(image, image, Size(9, 9), 2, 2);
image.copyTo(vec_frames[count_frame % I_NO_FRAMES_STORE]);

if (count_frame >= I_NO_FRAMES_STORE - 1) {
Mat mat_diff_temp(I_HEIGHT, I_WIDTH, CV_32S, Scalar(0));
for (int i_diff = 0; i_diff < I_NO_FRAMES_STORE; i_diff++) {

Mat mat_rgb_diff_temp = abs(vec_frames[ (count_frame - 1) % I_NO_FRAMES_STORE ] - vec_frames[ (count_frame - i_diff) % I_NO_FRAMES_STORE ]);
cvtColor(mat_rgb_diff_temp, mat_rgb_diff_temp, CV_BGR2GRAY);
mat_rgb_diff_temp = mat_rgb_diff_temp > I_THRESHOLD;
mat_rgb_diff_temp.convertTo(mat_rgb_diff_temp, CV_32S);
mat_diff_temp = mat_diff_temp + mat_rgb_diff_temp;

}
mat_diff_temp = mat_diff_temp > I_THRESHOLD_2;
// mat_diff_temp.convertTo(mat_diff_temp, CV_8U);

Mat mat_roi = mat_diff_temp.rowRange(0, i_height_basketball);
// imshow("ROI", mat_roi);
Moments mm = cv::moments(mat_roi, true);
Point p_center = Point(mm.m10 / mm.m00, mm.m01 / mm.m00);
circle(result, p_center, 3, CV_RGB(0, 255, 0), -1);
line(result, Point(0, i_height_basketball), Point(result.cols, i_height_basketball), Scalar(225, 0, 0), 1);

}
count_frame = count_frame + 1;
int clk_processing_time = (clock() - clk_start);
if (count_frame > 1)
imshow("image", result);
// waitKey(0);

int delay = (1000 / fps) - clk_processing_time;
if (delay <= 0)
delay = 2;
if (waitKey(delay) >= 27)
break;

}
vid.release();
return 0;
}

问题:

  1. 如何检测?我想用 Square detection 来检测箍周围的方形区域。
  2. 计算成功芽数的最佳方法是什么?或者如何计算

最佳答案

我有一个我怀疑会是相当强的基线:一旦球开始向下弧线,如果球再次表现出明显的向上运动,则它是一个失误。否则,它是一个篮子。这不会捕获空气球,但我怀疑它们相对较少。

我认为您可以通过学习成功投篮的球轨迹而获得很多里程,而不必过分担心篮筐。而且,你不是说摄像头是固定的吗?这是否意味着箍始终位于同一个位置,因此您只需指定其位置即可?

编辑:

如果您确实必须找到篮筐,我会寻找一个与球(您说您可以追踪)大小大致相同的橙色物体(图像的子区域)。更一般地说,您可以根据链接到的训练图像学习一个篮筐分类器,并将其应用于混合位置和比例,以搜索最佳匹配。您应该知道它的大致位置,即它位于图像的上部并且可能在一侧或另一侧。然后,除了轨迹特征之外,您还可以使用该识别区域的接近度特征来构建一个分类器,判断射击是否成功。

关于opencv - 检测篮球篮球和球跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19046890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com