OpenCV图像金字塔显示问题

时间:2016-01-08 07:02:43

标签: c++ opencv

我正在尝试使用带有opencv的Image Pyramids进行姿势估计。特别是我正在使用pyrDown()函数。 ret_left_cv8UC是基本图片。我将图像存储为std::vector<cv::Mat>

pyd_orgLeftIm.push_back(ret_left_cv8UC);
pyd_orgRightIm.push_back(ret_right_cv8UC);
for( int lvl=1 ; lvl<PYD_LEVEL ; lvl++ )
{
    cv::Mat __tmpL, __tmpR;
    cv::pyrDown( pyd_orgLeftIm[lvl-1],  __tmpL );
    cv::pyrDown( pyd_orgRightIm[lvl-1], __tmpR );

    pyd_orgLeftIm.push_back( __tmpL );
    pyd_orgRightIm.push_back( __tmpR );
}

它似乎工作正常,我检查了图像大小,我得到了预期。但是,显示器显示奇怪(我认为纵横比问题)。

基本图像看起来正确。如何强制其他人正确显示。

我的显示代码 -

for( int lvl=0 ; lvl<PYD_LEVEL ; lvl++ )
{
    char strL[100], strR[100];
    sprintf( strL, "org_imgLeft_%d", lvl );
    sprintf( strR, "org_imgRight_%d", lvl );
    cv::imshow( strL, pyd_orgLeftIm[lvl] );
    cv::imshow( strR, pyd_orgRightIm[lvl] );
    cout << pyd_orgLeftIm[lvl].rows << ", "<< pyd_orgRightIm[lvl].cols << endl;
}

我还想补充一点,最初显示是正确的(较小图像的正确宽高比),但只要我将鼠标放在图像上,它们就会缩放以适应窗口,如屏幕截图所示。

enter image description here

1 个答案:

答案 0 :(得分:2)

我最好的猜测是图像被拉伸,因为工具栏比图像宽。您可以指定希望图像始终保持正确的宽高比,并使用cv::WINDOW_KEEPRATIOcv::namedWindow常量添加到窗口标记中。这将导致图像垂直和水平拉伸。您还可以使用cv::CV_GUI_NORMAL一起删除工具栏。

int flags = cv::WINDOW_KEEPRATIO | cv::CV_GUI_NORMAL;
cv::namedWindow( strL, flags );
cv::imshow( strL, pyd_orgLeftIm[lvl] );

the documentation中加载和显示图像有一个很好的介绍。