首页 > > > OpenCV打开摄像头成功但是显示灰色
我是想重写下摄像头标定的程序,想要好好学习一下。。前提是同样的环境下OpenCV自带标定程序:...\opencv\sources\samples\cpp\calibration.cpp工作正常,摄像头可以打开。但是我仿写的死活都是灰色。。
我的代码段如下,其中标定部分还没写完,请大家忽视。
1 #include <iostream>
2 #include <time.h>
3
4 #include <cv.hpp>
5 #include <highgui\highgui.hpp>
6 #include <calib3d\calib3d.hpp>
7 #include <imgproc\imgproc.hpp>
8 #include <core\core.hpp>
9
10 using namespace std;
11 using namespace cv;
12
13 int main()
14 {
15 int success = 0;
16 int cameraId = 0;
17 int nFrames = 20;
18 int w = 6;
19 int h = 9;
20 clock_t prevTimestamp = 0;
21 int delay = 1000;
22
23 //相关参数初始化
24 Size boardSize, imageSize;
25 boardSize.width = w;
26 boardSize.height = h;
27 vector<vector<Point2f>> imagePoints;
28 float squareSize, aspectRatio;
29 Mat cameraMatrix, distCoeffs, homography;
30 VideoCapture capture;
31 capture.open(cameraId);
32 namedWindow("Image View", 1);
33
34 if (!capture.isOpened())
35 {
36 cout << "无法打开摄像头,(づ ̄3 ̄)づ╭❤~……" << endl;
37 return -1;
38 }
39
40 for (int i = 0; success < nFrames; i++)
41 {
42 Mat view, viewGray;
43 capture >> view;
44 imageSize = view.size();
45 vector<Point2f> pointBuf;
46 cvtColor(view, viewGray, COLOR_BGR2GRAY);
47
48 imshow("Image View", view);
49
50 //寻找角点
51 bool found = findChessboardCorners(view, boardSize, pointBuf,
52 CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FAST_CHECK | CV_CALIB_CB_NORMALIZE_IMAGE);
53
54 if (found)
55 {
56 //亚像素检测以提高精度
57 cornerSubPix(viewGray, pointBuf, Size(11, 11),
58 Size(-1, -1), TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
59 //标记出检测到的角点
60 drawChessboardCorners(view, boardSize, Mat(pointBuf), found);
61 }
62
63 //等待用户改变姿态
64 if (found && clock_t() - prevTimestamp < delay*1e-3*CLOCKS_PER_SEC)
65 {
66 imagePoints.push_back(pointBuf);
67 success = success + 1;
68 }
69 }
70
71 cout << "图像采集完成,开始标定喽,↖(^ω^)↗……" << endl;
72 //……
73 }来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3034/viewspace-3139579/ ,如需转载,请注明出处,否则将追究法律责任。