OpenCV(六):多通道分离与合并

目录

1.多通道分离split()

2.多通道合并merge()

[3.Android JNI demo](#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,其中每个图像必须拥有相同的尺寸和数据类型。

dst: 合并后输出的图像,通道数等于所有输入图像的通道数总和。

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);
}
相关推荐
Sirens.4 小时前
MySQL表设计进阶-约束范式连接索引与事务
android·数据库·mysql
zh_xuan7 小时前
安卓上 mmap读取并修改文件内容
android·mmap
二流小码农7 小时前
鸿蒙开发:实现文本渐变效果
android·ios·harmonyos
光头闪亮亮9 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮9 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(上)
android·sqlite·go
光头闪亮亮9 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
Ch_champion9 小时前
2018年之前的Android 项目上使用的技术点(及第三方库)
android
龚礼鹏10 小时前
RK Android16 wifi 投屏失败问题排查
android
晓梦林12 小时前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
小保CPP12 小时前
OpenCV C++基于模糊数学的图像修复
c++·人工智能·opencv·计算机视觉