現在、処理されているライブビデオキャプチャを表示する必要があるプロジェクトで作業しています。したがって、私は、これに似たものを使用しています:パフォーマンスビデオのキャプチャと処理中に発生する問題
cv::VideoCapture cap(0);
if (!cap.isOpened())
return -1;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
cv::namedWindow("Current Capture");
for (;;)
{
cv::Mat frame;
cap >> frame;
cv::Mat mirrored;
cv::flip(frame, mirrored, 1);
cv::imshow("Current Capture", process_image(mirrored));
if (cv::waitKey(30) >= 0) break;
}
私が持っている問題を、画像に円検出をperfomes process_image
は、スライドショーではなくなるように表示を終了するにはある程度の時間を必要とし、引き起こすことそれからビデオ。
私の質問は次のとおりです:どのように処理を高速化することができますprocess_image
の機能を操作せずにですか?
私は別のスレッドで画像処理を行うことを考えましたが、どうやって起動するのか分かりません。これ以外のアイデアはありますか?
PS:私はあなたが私のためにコードを書くことを期待していないよ、私はのみから開始するポイントを必要としています。)
EDIT:
[OK]を、私はできることは何も存在しない場合キャプチャ中のパフォーマンスについては、process_image
の機能を変更する必要があります。
cv::Mat process_image(cv::Mat img)
{
cv::Mat hsv;
cv::medianBlur(img, img, 7);
cv::cvtColor(img, hsv, cv::COLOR_BGR2HSV);
cv::Mat lower_hue_range; // lower and upper hue range in case of red color
cv::Mat upper_hue_range;
cv::inRange(hsv, cv::Scalar(LOWER_HUE1, 100, 100), cv::Scalar(UPPER_HUE1, 255, 255), lower_hue_range);
cv::inRange(hsv, cv::Scalar(LOWER_HUE2, 100, 100), cv::Scalar(UPPER_HUE1, 255, 255), upper_hue_range);
/// Combine the above two images
cv::Mat hue_image;
cv::addWeighted(lower_hue_range, 1.0, upper_hue_range, 1.0, 0.0, hue_image);
/// Reduce the noise so we avoid false circle detection
cv::GaussianBlur(hue_image, hue_image, cv::Size(13, 13), 2, 2);
/// store all found circles here
std::vector<cv::Vec3f> circles;
cv::HoughCircles(hue_image, circles, CV_HOUGH_GRADIENT, 1, hue_image.rows/8, 100, 20, 0, 0);
for (size_t i = 0; i < circles.size(); i++)
{
/// circle center
cv::circle(hsv, cv::Point(circles[i][0], circles[i][1]), 3, cv::Scalar(0, 255, 0), -1, 8, 0);
/// circle outline
cv::circle(hsv, cv::Point(circles[i][0], circles[i][1]), circles[i][2], cv::Scalar(0, 0, 255), 3, 8, 0);
}
cv::Mat newI;
cv::cvtColor(hsv, newI, cv::COLOR_HSV2BGR);
return newI;
}
私には何かできることがありますか?
1msは非常に短く、パフォーマンス上の問題があります。 –
ああ申し訳ありませんが、これは私が試したものでした。私はもともと30msでそれを試しました。質問を編集しました。 – muXXmit2X