cv::mAT缩小显示
时间: 2023-08-01 19:12:53 浏览: 42
如果你想缩小 OpenCV 中的 Mat 对象的显示,可以使用 resize 函数。具体来说,你可以按照以下方式调用该函数:
```c++
cv::Mat src = ...; // 原始图像
cv::Mat dst; // 缩小后的图像
cv::resize(src, dst, cv::Size(), 0.5, 0.5); // 缩小到原始尺寸的一半
cv::imshow("缩小后的图像", dst);
cv::waitKey(0);
```
在这里,resize 函数的第一个参数是原始图像,第二个参数是输出图像,第三个参数是输出图像的大小(如果为 cv::Size(),则输出图像大小将根据缩放比例自动计算),第四个和第五个参数是水平和垂直缩放比例。在这个例子中,我们将图像缩小到原始尺寸的一半。
相关问题
将cv::mat类型的图片输出两张图在QGraphicsView中
要在 `QGraphicsView` 中显示 `cv::Mat` 类型的图片,您需要将 `cv::Mat` 转换为 `QPixmap`,然后将 `QPixmap` 添加到 `QGraphicsScene` 中。以下是一个简单的例子,它演示了如何将一张 `cv::Mat` 类型的图片输出两张图并在 `QGraphicsView` 中显示:
```c++
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPixmap>
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 加载图片
cv::Mat image = cv::imread("test.jpg");
// 将图片转换为 QPixmap
QPixmap pixmap = QPixmap::fromImage(QImage(image.data, image.cols, image.rows, QImage::Format_RGB888));
// 创建 QGraphicsScene 和 QGraphicsView
QGraphicsScene scene;
QGraphicsView view(&scene);
// 添加第一张图片
QGraphicsPixmapItem item1(pixmap);
scene.addItem(&item1);
// 添加第二张图片
QGraphicsPixmapItem item2(pixmap);
item2.setScale(0.5);
item2.setPos(QPointF(pixmap.width(), 0));
scene.addItem(&item2);
// 调整视图大小并显示
view.setSceneRect(scene.itemsBoundingRect());
view.fitInView(scene.sceneRect(), Qt::KeepAspectRatio);
view.show();
return a.exec();
}
```
这段代码首先加载一张图片,然后将其转换为 `QPixmap`。接着,它创建了一个 `QGraphicsScene` 和一个 `QGraphicsView`,并向场景中添加了两个 `QGraphicsPixmapItem`,一个使用默认比例,另一个缩小了一半。最后,调整了视图大小并将其显示出来。
cv::imread 参数
### 回答1:
cv::imread函数是OpenCV中用于读取图像的函数,它有以下参数:
1. filename:要读取的图像文件名或路径,可以是相对路径或绝对路径。
2. flags:读取图像时的标志位,可以是以下值的组合:
- cv::IMREAD_UNCHANGED:不改变图像的深度和通道数,读取后的图像深度和通道数与原图像相同。
- cv::IMREAD_GRAYSCALE:以灰度模式读取图像,读取后的图像只有一个通道。
- cv::IMREAD_COLOR:以彩色模式读取图像,读取后的图像有三个通道。
- cv::IMREAD_ANYDEPTH:表示读取图像的深度为16位或32位深度,而不是8位深度。
- cv::IMREAD_ANYCOLOR:表示读取图像的颜色通道数为任意值,而不是3个通道。
- cv::IMREAD_REDUCED_GRAYSCALE_2:以灰度模式读取图像,并将其尺寸缩小为原来的1/2。
- cv::IMREAD_REDUCED_GRAYSCALE_4:以灰度模式读取图像,并将其尺寸缩小为原来的1/4。
- cv::IMREAD_REDUCED_GRAYSCALE_8:以灰度模式读取图像,并将其尺寸缩小为原来的1/8。
- cv::IMREAD_REDUCED_COLOR_2:以彩色模式读取图像,并将其尺寸缩小为原来的1/2。
- cv::IMREAD_REDUCED_COLOR_4:以彩色模式读取图像,并将其尺寸缩小为原来的1/4。
- cv::IMREAD_REDUCED_COLOR_8:以彩色模式读取图像,并将其尺寸缩小为原来的1/8。
3. dst:可选参数,当使用cv::IMREAD_UNCHANGED标志位读取PNG图像时,需要传入一个Mat对象,用于接收读取的PNG图像。
返回值:返回读取的图像,如果读取失败则返回一个空的Mat对象。
### 回答2:
cv::imread是OpenCV库中的一个函数,用于读取图像文件。
cv::imread的参数有两个:
1. 文件路径:参数类型是字符串,用于指定要读取的图像文件的路径。路径可以是相对路径或绝对路径,相对路径是相对于当前工作目录的路径。
例如,如果图像文件位于与代码文件相同的目录中,可以只提供文件名作为参数,例如"image.jpg"。如果图像文件位于不同的目录中,必须提供包括目录路径的完整文件路径,例如"D:/images/image.jpg"。
2. 读取模式:参数类型是整数,用于指定图像的读取模式。有多种读取模式可供选择,常用的有:
- cv::IMREAD_COLOR:读取彩色图像。图像将转换为三通道BGR格式。
- cv::IMREAD_GRAYSCALE:读取灰度图像。图像将转换为单通道灰度格式。
- cv::IMREAD_UNCHANGED:读取原始图像,包括Alpha通道(如果有)。图像的通道数将保持不变。
函数的返回值是一个cv::Mat对象,即读取的图像。在遇到不能打开图像文件或文件路径无效的情况下,返回的图像将为空(cv::Mat::empty()返回true)。
示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR);
if (image.empty())
{
std::cout << "Failed to open image file!" << std::endl;
return -1;
}
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
这段代码将读取名为"image.jpg"的彩色图像,并将其显示在一个窗口中。如果无法打开图像文件,将打印错误消息并返回-1。
### 回答3:
cv::imread 是 OpenCV 库中用于读取图像文件的函数。它有两个主要的参数:
1. filename:要读取的图像文件的路径和名称。可以是相对路径或绝对路径。可以是各种图像格式的文件,如JPEG、PNG、BMP等。
2. flags:用于确定读取图像的方式。它有以下几个选项:
- cv::IMREAD_COLOR:默认值,读取彩色图像。如果图像文件是彩色图像,将保留所有通道的像素值。
- cv::IMREAD_GRAYSCALE:以灰度图像的方式读取图像。将会将图像转换为单通道图像,像素的取值范围是0到255。
- cv::IMREAD_UNCHANGED:以包括 alpha 通道在内的方式读取图像。如果图像文件中包含 alpha 通道,保留所有通道的像素值。如果没有 alpha 通道,则结果与 cv::IMREAD_COLOR 相同。
函数返回一个 cv::Mat 对象,即读取的图像数据。如果读取失败,返回的 cv::Mat 对象为空。可以通过调用 cv::Mat 的成员函数来获取图像的相关信息,如宽度、高度、通道数等。
示例代码如下:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("example.jpg", cv::IMREAD_COLOR);
if (image.empty())
{
std::cout << "Failed to read image" << std::endl;
return -1;
}
int width = image.cols;
int height = image.rows;
int channels = image.channels();
std::cout << "Image width: " << width << std::endl;
std::cout << "Image height: " << height << std::endl;
std::cout << "Number of channels: " << channels << std::endl;
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
以上代码中,通过 cv::imshow 函数显示读取的图像,并通过 cv::waitKey 暂停程序的执行,直到用户按下任意键。