ITPub博客

首页 > > > OpenCV打开摄像头成功但是显示灰色

OpenCV打开摄像头成功但是显示灰色

作者:piny 时间:2019-09-12 15:52:49 0 删除 编辑

我是想重写下摄像头标定的程序,想要好好学习一下。。前提是同样的环境下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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-05-13

  • 博文量
    137
  • 访问量
    8805