您的位置:首页 > 编程语言 > Qt开发

QT5.8使用opencv打开图像窗口大小根据图像自适应调节

2017-05-09 16:59 309 查看
Opencv 使用自带窗口打开图像会由于图片太大产生 尺寸过大超过屏幕分辨率现象,由此设计解决方法如下,主要使用了opencv的
namedWindow()函数和resizeWindow()函数。
注意:
1.namedWindow(fileName.toStdString(),CV_WINDOW_NORMAL);//
CV_WINDOW_NORMAL为窗口大小策略,不可以更改为自动尺寸,否则图像不会根据窗口缩放。
2.resizeWindow()函数必须在图像显示之后设置,即namedWindow()和imshow()之后。
void MainWindow::on_action_2_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image Files (*.png *.jpg *.bmp)"));
qDebug()<<"filenames:"<<fileName;
char str_size[100] = {};
if (!fileName.isNull())
{
image = imread(fileName.toStdString());
if (image.empty())
   {
ui->label->setText("Can not find image!");
}
else
   {
//if(image.size().width > 1000 && 1000.0*image.size().height/image.size().width < 1024)
//                ui->label_image->resize(1000,(int)1000.0*image.size().height/image.size().width);
//else if(1000.0*image.size().height/image.size().width >= 1024)
//                ui->label_image->resize((int)1000.0*image.size().width/image.size().height , 1000);
//else
//                ui->label_image->resize(image.size().width,image.size().height);
displayImage(image);
namedWindow(fileName.toStdString(),CV_WINDOW_NORMAL);
imshow(fileName.toStdString(),image);
if(image.size().width > 1000 && 1000.0*image.size().height/image.size().width < 1024)
resizeWindow(fileName.toStdString(),1000,(int)1000.0*image.size().height/image.size().width);
else if(1000.0*image.size().height/image.size().width >= 1024)
resizeWindow(fileName.toStdString(),(int)1000.0*image.size().width/image.size().height , 1000);
else
resizeWindow(fileName.toStdString(),image.size().width,image.size().height);
sprintf(str_size,"Size:%d*%d,Channel:%d",image.size().width,image.size().height,image.channels());
ui->label->setText(QString(str_size));
}
}
else
{
qDebug()<<"file is empty";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: