현재 처리 된 라이브 비디오 캡처를 표시해야하는 프로젝트에서 작업하고 있습니다. 따라서,이 유사한 것을 사용하고 있습니다 :성능 비디오 캡처 및 처리 중 문제가 발생했습니다.
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;
}
I가 가지고있는 문제를, 이미지의 원 검출 perfomes process_image
이의 슬라이드 쇼 오히려으로 표시 완료하는 데 시간이 필요하고 원인이 있음 다음 비디오.
내 질문은 : process_image
조작 기능없이 처리 속도를 어떻게 높일 수 있습니까?
다른 스레드에서 이미지 처리를 수행하는 것에 대해 생각했지만 시작하는 방법을 잘 모르겠습니다. 이것보다 다른 아이디어가 있습니까?
PS : 나는 당신이 나를 위해 코드를 작성하는 기대 아니에요, 난 단지에서 시작하는 지점이 필요합니다;
) 편집 : 내가 할 수있는 일은이없는 경우,가
확인 캡처하는 동안 성능에 관해서는 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