OpenCV(四):Mat支持的运算
目录
1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。
1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。
加法:Mat + Mat,保存到 result 中
cv::add(mat1, mat2, result);
减法: Mat - Mat,保存到 result 中
cv::subtract(mat1, mat2, result);
乘法: Mat * Mat,保存到 result 中
cv::multiply(mat1, mat2, result);
除法: Mat / Mat,保存到 result 中
cv::divide(mat1, mat2, result);
2.Mat类支持逻辑与、或、非等逻辑运算,
逻辑与:Mat1 & Mat2,保存到 result(像素一和像素二都为1,则结果为1,否则为0)
cv::bitwise_and(mat1, mat2, result);
逻辑或:Mat1 | Mat2,保存到 result(像素一和像素二都为0,则结果为0,否则为1)
cv::bitwise_or(mat1, mat2, result);
逻辑非:~Mat1,保存到 result(像素为0,则结果为1,像素为1,则结果为0)
cv::bitwise_not(src, 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__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
using namespace cv;
using namespace std;
extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_test(JNIEnv *env, jclass clazz) {
Mat mat2 = (Mat_<int>(1, 5) << 1, 2, 3, 4, 5);
Mat mat1 = (Mat_<int>(1, 5) << 4, 5, 6, 7, 8);
Mat result(1,5,CV_8S);
cv::add(mat1, mat2, result);//加法
// cv::subtract(mat1, mat2, result);//减法
//cv::multiply(mat1, mat2, result);//乘法
//cv::divide(mat1, mat2, result);//除法
// cv::bitwise_and(mat1, mat2, result);//与&
// cv::bitwise_or(mat1, mat2, result);//或|
//cv::bitwise_not(src, dst);//非~
ostringstream ss;
ss << "result data:" << std::endl;
// 遍历并输出像素值
for (int i = 0; i < result.rows; i++) {
for (int j = 0; j < result.cols; j++) {
// 获取像素值
int value = result.at<int>(i, j);
// 构建输出字符串
ss <<value << " ";
}
ss << std::endl;
}
LOGD("%s",ss.str().c_str());
}