Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv问题_Opencv - Fatal编程技术网

Opencv问题

Opencv问题,opencv,Opencv,使用opencv提供的Example。 在我校准了RMS为0.66左右的立体对之后,我尝试制作一个3d点云。 不幸的是,在我进行立体校正后,我的输入图像变成黑色。没有其他的工作是可能的。 可能是因为我校准不好 Mat img1 = imread(img1_filename, IMREAD_GRAYSCALE); Mat img2 = imread(img2_filename, IMREAD_GRAYSCALE); if (img1.empty()) { printf("Command-

使用opencv提供的Example。 在我校准了RMS为0.66左右的立体对之后,我尝试制作一个3d点云。 不幸的是,在我进行立体校正后,我的输入图像变成黑色。没有其他的工作是可能的。 可能是因为我校准不好

Mat img1 = imread(img1_filename, IMREAD_GRAYSCALE);
Mat img2 = imread(img2_filename, IMREAD_GRAYSCALE);

if (img1.empty())
{
    printf("Command-line parameter error: could not load the first input image file\n");
    return -1;
}
if (img2.empty())
{
    printf("Command-line parameter error: could not load the second input image file\n");
    return -1;
}
scale = 1;
if (scale != 1.f)
{
    Mat temp1, temp2;
    int method = scale < 1 ? INTER_AREA : INTER_CUBIC;
    resize(img1, temp1, Size(), scale, scale, method);
    img1 = temp1;
    resize(img2, temp2, Size(), scale, scale, method);
    img2 = temp2;
}

Size img_size = img1.size();

Rect roi1, roi2;

Mat Q;

if (!intrinsic_filename.empty())
{
    // reading intrinsic parameters
    FileStorage fs(intrinsic_filename, FileStorage::READ);
    if (!fs.isOpened())
    {
        printf("Failed to open file %s\n", intrinsic_filename.c_str());
        return -1;
    }

    Mat M1, D1, M2, D2;
    fs["M1"] >> M1;
    fs["D1"] >> D1;
    fs["M2"] >> M2;
    fs["D2"] >> D2;

    M1 *= scale;
    M2 *= scale;

    fs.open(extrinsic_filename, FileStorage::READ);
    if (!fs.isOpened())
    {
        printf("Failed to open file %s\n", extrinsic_filename.c_str());
        return -1;
    }

    Mat R, T, R1, P1, R2, P2;
    fs["R"] >> R;
    fs["T"] >> T;

    stereoRectify(M1, D1, M2, D2, img_size, R, T, R1, R2, P1, P2, Q, CV_CALIB_ZERO_DISPARITY, -1, img_size, &roi1, &roi2);

    Mat map11, map12, map21, map22;
    initUndistortRectifyMap(M1, D1, R1, P1, img_size, CV_16SC2, map11, map12);
    initUndistortRectifyMap(M2, D2, R2, P2, img_size, CV_16SC2, map21, map22);

    Mat img1r, img2r;
    remap(img1, img1r, map11, map12, INTER_CUBIC);
    remap(img2, img2r, map21, map22, INTER_CUBIC);

    img1 = img1r;
    img2 = img2r;
    imshow("img1", img1);
    imshow("img2", img2);
    cv::waitKey(0);
}
Mat img1=imread(img1\u文件名,imread\u灰度);
Mat img2=imread(img2\u文件名,imread\u灰度);
if(img1.empty())
{
printf(“命令行参数错误:无法加载第一个输入图像文件\n”);
返回-1;
}
if(img2.empty())
{
printf(“命令行参数错误:无法加载第二个输入图像文件\n”);
返回-1;
}
比例=1;
如果(比例!=1.f)
{
Mat temp1、temp2;
int方法=比例<1?内部面积:内部立方;
调整大小(img1、temp1、Size()、比例、比例、方法);
img1=temp1;
调整大小(img2、temp2、Size()、比例、比例、方法);
img2=temp2;
}
大小img_Size=img1.Size();
矩形roi1,roi2;
matq;
如果(!固有_filename.empty())
{
//读取内部参数
文件存储fs(内部文件名,文件存储::读取);
if(!fs.isopeed())
{
printf(“无法打开文件%s\n”,固有的_filename.c_str());
返回-1;
}
材料M1、D1、M2、D2;
fs[“M1”]>>M1;
fs[“D1”]>>D1;
fs[“M2”]>>M2;
fs[“D2”]>>D2;
M1*=刻度;
M2*=比例;
打开(外部文件名,文件存储::读取);
如果(!fs.isOpened())
{
printf(“无法打开文件%s\n”,外部文件名.c_str());
返回-1;
}
材料R、T、R1、P1、R2、P2;
fs[“R”]>>R;
fs[“T”]>>T;
立体校正(M1、D1、M2、D2、img_大小、R、T、R1、R2、P1、P2、Q、CV_校准_零度视差、-1、img_大小、roi1和roi2);
Mat map11、map12、map21、map22;
初始畸变校正映射(M1、D1、R1、P1、img_大小、CV_16SC2、map11、map12);
初始无畸变整流图(M2、D2、R2、P2、img_尺寸、CV_16SC2、map21、map22);
Mat img1r、img2r;
重新映射(img1、img1r、map11、map12、内部立方);
重新映射(img2、img2r、map21、map22、内部立方);
img1=img1r;
img2=img2r;
imshow(“img1”,img1);
imshow(“img2”,img2);
cv::waitKey(0);
}
根据:

在opencv校准示例中更改stereoCalibrate标志可以解决此问题。 例如,使用:cv::CALIB_RATIONAL_MODEL+cv::CALIB_FIX_K3+cv::CALIB_FIX_K4+cv::CALIB_FIX_K5+cv::CALIB_FIX_K6

另一个会产生更大的RMS错误,但至少正确的重新映射是同时校准内部和外部。 所以不要使用cv::CALIB_USE_instruction_GUESS+cv::CALIB_FIX_instruction