openCV::Mat类多通道分离与合并

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;
int main()
{
	Mat img = imread("D:/DownLoad/x7b891op.png");

	Mat img32;
	img.convertTo(img32, CV_32F, 1 / 255.0, 0);
	
	Mat gray0, gray1;
	cvtColor(img, gray0, COLOR_BGR2GRAY);
	cvtColor(img, gray1, COLOR_RGB2GRAY);
	
	Mat imgs[3];//创建一个数组用来存储分离后的图像
	split(img,imgs);//将img分离为三个单通道图像

	Mat img0, img1, img2;
	img0 = imgs[0];
	img1 = imgs[1];
	img2 = imgs[2];

	Mat img_H;
	merge(imgs, 3, img_H);//将数组内的三个单通道图像合并为一个三通道图像

	Mat zero = Mat::zeros(Size(img.cols,img.rows),CV_8UC1);//创建一个三通道全为0的图像

	vector<Mat> imgsV;//创建类型为Mat的向量
	imgsV.push_back(img0);//添加向量
	imgsV.push_back(zero);
	imgsV.push_back(zero);
	

	Mat imgsVH;
	merge(imgsV, imgsVH);将向量中三个元素合并为一个三通道图像

    //通过image watch可知imgsVH的第一个通道为蓝色,所以默认模式为BGR
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV 中,Mat 是一个基本的图像容器,用于存储和处理图像。下面是一些常用的 Mat 操作: 1. 创建 Mat 对象:可以通过构造函数或者 create() 函数创建 Mat 对象,例如: ```cpp // 创建一个 3 行,2 列的 CV_8UC1 型的图像 cv::Mat image1(3, 2, CV_8UC1); // 创建一个 3 行,2 列的 CV_8UC3 型的图像 cv::Mat image2(3, 2, CV_8UC3); // 创建一个空的图像 cv::Mat emptyImage; // 创建一个和另一个 Mat 对象相同大小和型的图像 cv::Mat image3 = image1.clone(); ``` 2. 访问像素值:可以使用 at() 函数或者指针访问像素值,例如: ```cpp cv::Mat image = cv::imread("image.jpg"); // 使用 at() 函数访问像素值 cv::Vec3b pixel1 = image.at<cv::Vec3b>(0, 0); // 使用指针访问像素值 cv::Vec3b pixel2 = image.ptr<cv::Vec3b>(0)[0]; ``` 3. 图像拷贝:可以使用 copyTo() 函数将一个 Mat 对象拷贝到另一个 Mat 对象,例如: ```cpp cv::Mat image1 = cv::imread("image1.jpg"); cv::Mat image2; // 将 image1 拷贝到 image2 image1.copyTo(image2); ``` 4. 图像缩放:可以使用 resize() 函数对图像进行缩放,例如: ```cpp cv::Mat image = cv::imread("image.jpg"); cv::Mat resizedImage; // 将图像缩小一半 cv::resize(image, resizedImage, cv::Size(), 0.5, 0.5); ``` 5. 图像裁剪:可以使用 ROI(Region of Interest)对图像进行裁剪,例如: ```cpp cv::Mat image = cv::imread("image.jpg"); // 创建一个矩形,表示要裁剪的区域 cv::Rect roi(100, 100, 200, 200); // 裁剪图像 cv::Mat croppedImage = image(roi); ``` 6. 图像通道分离合并:可以使用 split() 函数将图像通道分离,使用 merge() 函数将图像通道合并,例如: ```cpp cv::Mat image = cv::imread("image.jpg"); // 分离图像通道 std::vector<cv::Mat> channels; cv::split(image, channels); // 合并图像通道 cv::Mat mergedImage; cv::merge(channels, mergedImage); ``` 7. 图像型转换:可以使用 cvtColor() 函数将图像型进行转换,例如: ```cpp cv::Mat image = cv::imread("image.jpg"); // 将图像转换为灰度图像 cv::Mat grayImage; cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY); ``` 以上是 Mat 操作中的一些常用方法,还有很多其他的方法可以参考 OpenCV 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值