Я пытаюсь написать код для обнаружения объекта в OpenCV. Но я не знаю, в чем проблема с моей веб-камерой ноутбука, когда у меня просто серое окно. Я имею в виду светодиод веб-камеры, но окно серое и ничего не показывает. Я искал сайт, и я знаю, что были люди с той же проблемой, и это было объяснено ранее, но ни одно из решений не помогло мне. В любом случае вот мой код, я был бы рад, если бы вы могли мне помочь! Благодарю.
Кстати, я использую Windows 8.1, OpenCV 2.2 и Visual c ++ 2010 Express. Если может быть какая-либо несовместимость в отношении окон или что-то еще, дайте мне знать.
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
int main() {
cv::VideoCapture capWebcam(0);
if (capWebcam.isOpened() == false) {
std::cout << "error: capWebcam not accessed successfully\n\n";
return(1);
}
cv::Mat matOriginal;
cv::Mat matProcessed;
std::vector<cv::Vec3f> vecCircles;
std::vector<cv::Vec3f>::iterator itrCircles;
cv::namedWindow("Original");
cv::namedWindow("Processed");
char charCheckForEscKey = 0;
while (charCheckForEscKey != 27) {
if (capWebcam.read(matOriginal) == NULL) {
std::cout << "error: frame not read from webcam\n\n";
break;
}
cv::inRange(matOriginal,
cv::Scalar(0, 0, 175),
cv::Scalar(100, 100, 256),
matProcessed);
cv::GaussianBlur(matProcessed,
matProcessed,
cv::Size(9, 9),
1.5);
cv::HoughCircles(matProcessed,
vecCircles,
CV_HOUGH_GRADIENT,
2,
matProcessed.rows / 4,
100,
50,
10,
400);
for (itrCircles = vecCircles.begin(); itrCircles != vecCircles.end(); itrCircles++) {
std::cout << "ball position x=" << (*itrCircles)[0]
<< ", y=" << (*itrCircles)[1]
<< ", z=" << (*itrCircles)[2] << "\n";
cv::circle(matOriginal,
cv::Point((int)(*itrCircles)[0], (int)(*itrCircles)[1]),
3,
cv::Scalar(0, 255, 0),
CV_FILLED);
cv::circle(matOriginal,
cv::Point((int)(*itrCircles)[0], (int)(*itrCircles)[1]),
(int)(*itrCircles)[2],
cv::Scalar(0, 255, 0),
3);
}
cv::imshow("Original", matOriginal);
cv::imshow("Processed", matProcessed);
charCheckForEscKey = cv::waitKey(10);
}
return(0);
}
Задача ещё не решена.
Других решений пока нет …