예제 #1
0
HotPixel::HotPixel(const Coordinate& newPt, double newScaleFactor,
		LineIntersector& newLi)
	:
	li(newLi),
	pt(newPt),
	originalPt(newPt),
	scaleFactor(newScaleFactor)
{
	if (scaleFactor != 1.0) {
		assert( scaleFactor != 0 ); // or should it be an IllegalArgumentException ?
		pt.x=scale(pt.x);
		pt.y=scale(pt.y);
	}
	initCorners(pt);
}
예제 #2
0
void WebcamDevice::calibrate()
{
    cv::Mat imCalib[NBRIMAGESCALIB];
    cv::Mat cameraMatrix = cv::Mat::eye(3, 3, CV_64F), distCoeffs = cv::Mat::zeros(8, 1, CV_64F);
    cameraMatrix.at<double>(0,0) = 1.0;

    std::vector<cv::Mat> rvecs, tvecs;
    std::vector<std::vector<cv::Point2f>> chessCornersInit;
    std::vector<std::vector<cv::Point3f>> chessCorners3D;

    std::cout << "Debut du calibrage..." << std::endl;

    for(int i = 0; i < NBRIMAGESCALIB; i++)
    {
        std::vector<cv::Point2f> initCorners(ROWCHESSBOARD * COLCHESSBOARD, cv::Point2f(0, 0));
        chessCornersInit.push_back(initCorners);
    }

    for(int i = 0; i < NBRIMAGESCALIB; i++)
    {
        std::ostringstream oss;
        oss << SAVEDPATH << i + 1 << ".png";
        imCalib[i] = cv::imread(oss.str());
        cv::cvtColor(imCalib[i], imCalib[i], CV_BGR2GRAY);

        bool patternfound = cv::findChessboardCorners(imCalib[i], cv::Size(ROWCHESSBOARD, COLCHESSBOARD), chessCornersInit[i]);

        if(patternfound)
            cv::cornerSubPix(imCalib[i], chessCornersInit[i], cv::Size(5, 5), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));

        cv::drawChessboardCorners(imCalib[i], cv::Size(ROWCHESSBOARD, COLCHESSBOARD), cv::Mat(chessCornersInit[i]), patternfound);

        //cv::imshow("image", imCalib[i]);

        //cv::waitKey(0);
    }

    for(int i = 0; i < NBRIMAGESCALIB; i++)
    {
        std::vector<cv::Point3f> initCorners3D;
        for(int j = 0; j < COLCHESSBOARD; j++)
        {
            for(int k = 0; k < ROWCHESSBOARD; k++)
            {
                cv::Point3f corner(j * 26.0f, k * 26.0f, 0.0f);
                initCorners3D.push_back(corner);
            }
        }
        chessCorners3D.push_back(initCorners3D);
    }

    cv::calibrateCamera(chessCorners3D, chessCornersInit, cv::Size(imCalib[0].size()), cameraMatrix, distCoeffs, rvecs, tvecs);

    std::string filename = "../rsc/intrinsicMatrix.yml";
    cv::FileStorage fs(filename, cv::FileStorage::WRITE);

    fs << "cameraMatrix" << cameraMatrix << "distCoeffs" << distCoeffs;

    std::cout << "Sauvegarde de la matrice intrinseque : " << filename << std::endl;

    fs.release();
}