我正在尝试编写用于检测 OpenCV 中的对象的代码。但我不知道我的笔记本电脑网络摄像头出了什么问题,我只是得到一个灰色窗口。我的意思是网络摄像头 LED 亮着,但窗口是灰色的,什么也没有显示。我搜索了该网站,我知道有人遇到同样的问题,并且之前已经解释过,但没有一个解决方案对我有用。无论如何,这是我的代码,如果你能帮助我,我会很高兴!谢谢。
顺便说一句,我使用的是 Windows 8.1、OpenCV 2.2 和 Visual c++ 2010 Express。如果在 Windows 或任何方面可能有任何不兼容,请告诉我。
#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);
}