目录
1.多通道分离split()
2.多通道合并merge()
3.Android JNI demo
1.多通道分离split()
void cv::split ( InputArray m,
OutputArrayOfArrays mv
)
m:待分离的多通道图像。
mv:分离后的单通道图像,为向量vector形式。
2.多通道合并merge()
void cv::merge ( InputArrayOfArrays mv,
OutputArray dst
)
mv:需要合并的图像向量vector,其中每个图像必须拥有相同的尺寸和数据类型。文章来源:https://www.toymoban.com/news/detail-695562.html
dst: 合并后输出的图像,通道数等于所有输入图像的通道数总和。文章来源地址https://www.toymoban.com/news/detail-695562.html
3.Android jni demo
#include <jni.h>
#include <string>
#include <android/bitmap.h>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <android/log.h>
#define LOG_TAG "xxx"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
using namespace cv;
using namespace std;
extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_opencv_1test(JNIEnv *env, jclass clazz,
jobject bitmap) {
AndroidBitmapInfo info;
void *pixels;
CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
//判断图片是位图格式有RGB_565 、RGBA_8888
CV_Assert(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888 ||
info.format == ANDROID_BITMAP_FORMAT_RGB_565);
CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
CV_Assert(pixels);
//将bitmap转化为Mat类
Mat image(info.height, info.width, CV_8UC4, pixels);
Mat imgs[4];
split(image,imgs);
Mat img0,img1,img2,img3;
img0=imgs[0];
img1=imgs[1];
img2=imgs[2];
img3=imgs[3];
Mat img_H;
merge(imgs,4,img_H);
imwrite("/sdcard/DCIM/img_H.jpg",img_H);
Mat zero=Mat::zeros(Size(image.cols,image.rows),CV_8UC1);
vector<Mat> imgsV;
imgsV.push_back(img0);
imgsV.push_back(img1);
imgsV.push_back(img2);
imgsV.push_back(img3);
Mat imgsVH;
merge(imgsV,imgsVH);
imwrite("/sdcard/DCIM/imgsVH.jpg",imgsVH);
}
到了这里,关于OpenCV(六):多通道分离与合并的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!