OpenCV图像减法签名输出
OpenCV Image substraction signed output
我想减去两个灰度图像(CV_8UC1),并得到他们的符号差异作为结果(CV_16SC1)。
我已经尝试了下面的代码,但我得到的差异是CV_8UC1矩阵,而不是有符号的CV_16SC1。
你能帮助正确定义掩码矩阵和数据类型参数吗?
谢谢!
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include "Imagesubstraction.h"
using namespace cv;
using namespace std;
int main(void)
{
Mat M1, M2,Dif;
M1 = imread("../data/difference/a.bmp", CV_LOAD_IMAGE_GRAYSCALE);
M2 = imread("../data/difference/b.bmp", CV_LOAD_IMAGE_GRAYSCALE);
Mat Mask(1024, 1024, CV_8UC1, Scalar(1));
subtract(M1, M2, Dif,Mask,3);
imwrite("../data/difference/c.bmp", Dif);
return 0;
}
当然,保存为BMP格式后,您将得到一个无符号矩阵。如OpenCV文档中所述:
只有8位(或16位无符号(CV_16U)在PNG, JPEG 2000和TIFF的情况下)单通道或3通道(与' BGR '通道顺序)图像可以使用此功能保存。
但是如果你在保存Dif
矩阵之前看一下它,你会发现它是一个16位的有符号矩阵。
至少,下面的代码片段按预期工作:
cv::Mat m1(100, 100, CV_8U, cv::Scalar(50));
cv::Mat m2(100, 100, CV_8U, cv::Scalar(30));
cv::Mat dif;
cv::Mat mask(100, 100, CV_8U, cv::Scalar(255));
cv::subtract(m2, m1, dif, mask, CV_16S);
std::cout << dif << std::endl;
相关文章:
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 如何从amd gpus的显示输出中获取图像数据
- 使用opencv在GPU上调整图像大小会产生空的输出矩阵
- 使用几何着色器的图层渲染似乎只输出图像数组的第一层
- TensorFlow图像识别输出格式C
- 将输出图像保存在Caffe中
- 我可以将从相机获取的单通道图像输出到 winAppi 窗口中吗?
- 输入层类型:图像数据在窗口咖啡cpp中给出空白输出
- 将 RGB 图像转换为 3 个 HSI 输出
- MFC-无法从资源输出BMP图像
- OpenCV,Dlib - 作为黑色图像输出的垫子对象
- 如何显示窗口大小不同的输出图像?通过使用 cv::Mat
- 将中值剪切颜色缩减算法的输出调色板应用于源图像
- 如何使用 ASCII 代码在输出屏幕上显示图像C++
- C++-试图读取.PPM图像,意外输出
- 输出窗口显示三个图像,而不是一个
- 如何将视频文件作为输入传递给NodeJS中的子进程,并接收帧/图像作为输出
- 卷积模糊图像产生一个粗略的输出图像
- Linux CGI Web API -如何在c++下输出二进制JPEG图像
- 使用 openCV c++ 示例代码执行抓取后保存输出图像