【发布时间】:2018-06-02 06:53:56
【问题描述】:
我正在 Qt 环境中编程,我有一个大小为 2592x2048 的 Mat 图像,我想将其调整为我拥有的“标签”的大小。但是当我想显示图像时,我必须将宽度乘以 3,以便图像以正确的大小显示。有什么解释吗?
这是我的代码:
//Here I get image from the a buffer and save it into a Mat image.
//img_width is 2592 and img_height is 2048
Mat image = Mat(cv::Size(img_width, img_height), CV_8UC3, (uchar*)img, Mat::AUTO_STEP);
Mat cimg;
double r; int n_width, n_height;
//Get the width of label (lbl) into which I want to show the image
n_width = ui->lbl->width();
r = (double)(n_width)/img_width;
n_height = r*(img_height);
cv::resize(image, cimg, Size(n_width*3, n_height), INTER_AREA);
谢谢。
【问题讨论】:
-
解释具体含义:所以图像以正确的尺寸显示,你可以显示你得到的图像。
-
@Soroor:没有OpenCV可以尝试,但我的猜测是你需要传递每行的字节数,这意味着每行的像素数(宽度)并乘以字节每像素,最后得到未压缩图像的大小,乘以高度!所以我的猜测是你需要传递图像的字节数,它可能等于或不等于像素数!
-
3*width 是步幅,这就是你需要它的原因。这是每行的字节数,假设你有 3 个通道,这就是 3 的来源
-
@eyllanesc 是的,3 我得到了我想要的。抱歉我的描述含糊。
-
@AhmedSaleh Antonion Dias 所以我的问题是如果我需要传递每行的字节数,为什么只传递宽度?而不是高度?我也有同样的猜测,将图像类型更改为 8UC1,但问题再次存在......