【 OpenCV】——同一窗口显示两张图片

【 OpenCV】——在同一窗口显示两张图片


前言

本文介绍了窗口显示图像的基础内容。


使用步骤

##1.引入库
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;

## 2.读入数据
//显示多个图像
void showManyImages(vector<Mat> srcImage)
{
	int nImages = srcImage.size();  //准备显示的图像个数
	Size nSizewindows;   //准备显示图像的布局
	nSizewindows = Size(2, 1);

	if (nImages > 2) {
		cout << "图像个数超过2个!" << endl;
		return;
	}

	int nRows = 500; //单个图像的显示行
	int nCols = 500; //单个图像的显示列

	//创建矩阵
	Mat dstImage(nRows, nCols * 2, CV_8UC3);

	for (int i = 0; i < nImages; i++)
	{
		//修改图片的大小
		resize(srcImage[i], srcImage[i], Size(nCols, nRows));

		//将修改后的图片复制到dstImage中
		srcImage[i].copyTo(dstImage(Rect((i % 2) * nCols, (i / 2) * nRows, nCols, nRows)));
	}
	imshow("单窗口显示两张图片", dstImage);
}

int main()
{
	//2.在工程目录下新建子目录,把图像放入子目录中;
	//3.以彩色方式打开图像并显示;
	Mat img = imread("alpha.png");
	if (img.empty())
	{
		return -1;
	}
	imshow("原图", img);

	//4.以灰度方式打开图像并显示。
	//Mat image;
	Mat image = imread("alpha.png", IMREAD_GRAYSCALE);
	//cvtColor(img, image, COLOR_BGR2GRAY);
	if (image.empty())
	{
		return -1;
	}

	imshow("灰度图", image);

	//5.新建窗口显示图像并显示,让图像停留5秒;
	namedWindow("新建窗口", WINDOW_AUTOSIZE);
	imshow("新建窗口", img);
	waitKey(5000);

	//6.存储第4步的灰度图像,并显示;
	imwrite("alpha1.png", image);
	imshow("灰度图", image);

	//7.单窗口中同时显示图像和对应的灰度图像;
	vector<Mat> imageVector(2);
	imageVector[0] = imread("alpha.png");
	imageVector[1] = imread("alpha1.png");
	showManyImages(imageVector);
	waitKey(0);
}

总结

以上是一个简单窗口显示图片的代码段,读取两张图片,该图片在窗口下进行显示。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV可以在同一窗口下,以上下层的方式显示两张图片。具体步骤如下: 1. 读取两张图片: ``` cv::Mat img1 = cv::imread("image1.jpg", cv::IMREAD_COLOR); cv::Mat img2 = cv::imread("image2.jpg", cv::IMREAD_COLOR); ``` 2. 将第一张图片转换为RGBA格式,并将alpha通道设置为0.5: ``` cv::Mat img1_rgba; cv::cvtColor(img1, img1_rgba, cv::COLOR_BGR2RGBA); cv::Mat alpha(img1_rgba.size(), CV_8UC1, cv::Scalar(128)); cv::insertChannel(alpha, img1_rgba, 3); ``` 3. 在窗口显示第一张图片: ``` cv::imshow("Display", img1_rgba); ``` 4. 将第一张图片作为底层,将第二张图片作为上层,合并两张图片: ``` cv::Mat img2_rgba; cv::cvtColor(img2, img2_rgba, cv::COLOR_BGR2RGBA); cv::Mat result(img1_rgba.size(), CV_8UC4); std::vector<cv::Mat> channels; cv::split(img2_rgba, channels); channels[3] = channels[3] / 2; // 将alpha通道设置为0.5,使得上层图片半透明 cv::merge(channels, result); cv::addWeighted(img1_rgba, 1.0, result, 1.0, 0.0, result); ``` 5. 在窗口显示合并后的图片: ``` cv::imshow("Display", result); ``` 在这个示例中,我们首先将第一张图片转换为RGBA格式,并将alpha通道设置为0.5,使得第一张图片半透明。然后将第一张图片显示窗口中。接着将第二张图片转换为RGBA格式,并将alpha通道设置为0.5,使得第二张图片半透明。将第二张图片作为上层,第一张图片作为底层,合并两张图片。最后在窗口显示合并后的图片

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉生☜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值