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