opencv保存灰度图或者二值图时能够保存为单通道吗?

如题所述

可以。原来是单通道的,直接cvSaveImage,原来是3通道的,先用cvCvtColor转换为单通道,再用cvSaveImage保存
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-24
可以,其实灰度图二值图本来就是单通啊追问

我用cvSaveImage()保存,然后再打开显示的通道数怎么是3啊?

追答

贴你的代码

追问

IplImage *sub_image=cvCreateImage(cvGetSize(image.GetImage()),IPL_DEPTH_8U,1);

cvSub(cimg.GetImage(),gray_image,sub_image,NULL);

cvSaveImage("f:\\1.bmp",sub_image); 

上面是保存好的,然后我再打开。

第2个回答  2013-12-29
cvSaveImage保存的图像,原来多少通道就是多少通道。你打开后变成三通道的原因是你用cvLoadImage( filename,***) ***处写的是0或者1了,应该写为-1,即cvLoadImage( filename, -1 ); 则为读取图像的原通道数,这时打开后的图像肯定通道数为1的。
第3个回答  2013-07-25
cvLoadImage(“1.bmp”,0), 可能跟保存为.bmp格式的图像有关

opencv保存灰度图或者二值图时能够保存为单通道吗?
可以。原来是单通道的,直接cvSaveImage,原来是3通道的,先用cvCvtColor转换为单通道,再用cvSaveImage保存

python opencv身份证灰度图二值化应该怎么处理
得到的图像就是单通道的,也能够用这个函数:CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code );code=CV_BGR2GRAY;opencv还提供了非常多方式,我这边就不一一举例了。

怎么用opencv获取图像灰度值(用C语言)
1、可以变成灰度图也可以不变。这里假设你的图像都是IPL_DEPTH_8U类型。2、如果变成灰度图,就是单通道图像,获取的就是每一个像素点的灰度值。IplImage* img = cvLoadImage("test.bmp", 0);for (int i = 0; i < img->height; i++){ for (int j = 0; j < img->width; j++){ ...

C++环境下OpenCV的findContours函数的参数详解
参数1 image:单通道图像矩阵,用于提取轮廓的图像,常是灰度图或二值图,可以通过边缘检测算法(如Canny)得到。参数2 contours:用于存储检测到的轮廓的容器。每个轮廓由一系列连续的点构成,这些点集合形成一个轮廓。由于图像中可能有多个对象,所以contours通常是一个包含多个轮廓的集合。参数3 hierarchy...

OpenCV彩色图与灰度图互相转换
OpenCV能将彩色图转换为灰度图,方法有三种。第一种为公式转换,结果接近于0.3*R+0.59*G+0.11*B,第二种为取每个通道均值,第三种为取每个通道最大值。效果不尽人意。OpenCV使用的转换方式效果与前两种相似。验证显示OpenCV方式可能在计算精度上有区别。转换灰度图至彩色图,OpenCV直接将灰度图复制...

Opencv之图像灰度化
首先来看一下图像种类(ps: 这里介绍用到的彩色图像,灰度图像,二值图像,其他图像暂不做介绍)。每个图像的像素通常对应于二维空间中一个特定的'位置',并且有一个或者多个与那个点相关的 采样值 组成 数值 。根据这些采样数目及特性的不同数字图像可以划分为: 二值图像 :图像中每个像素的亮度值...

OpenCV之二值图像介绍
编程与代码方面,OpenCV中处理二值图像主要通过单通道字节类型的Mat对象,对于任何输入图像,首先需转换为灰度图,然后通过二值化方法将其转为二值图像。本质上,这一过程是对数据的二分类分割,适用于多种数据处理方法,但图像的特殊性质决定了只有某些方法才能达到良好效果。分割关键在于寻找合适的阈值T,...

matlab求取图像的灰度图、图像轮廓以及二值化图像
接着,轮廓检测是通过edge函数实现的。它支持多种边缘检测算法,如Sobel、Canny和Prewitt,这些方法能够识别出图像中的边缘信息,对于形状分析和物体识别非常有用。当你需要将图像简化为黑白二值形式时,imbinarize函数是你的工具。通过设置阈值,imbinarize会将灰度图像中的像素值分为两个清晰的类别:黑色(值...

OpenCV 用imread函数读入灰度图变成彩色图怎么回事
但是默认以彩色的方式读入,所以三个通道的值都取了该像素对应的灰度值。所以~~正确的读入灰度图的方式是:[cpp] view plain copy img = imread("F:\\\\My_Desktop\\\\data\\\\gesture_frame\\\\test\\\\1\\\\1\\\\0.jpg",0);即使0.jpg本来就是一张灰度图,还是得让第二个参数等于0!!!

OpenCV中为什么将一幅图片改为灰度图后,灰度图比原图像占用空间大?
你原本图像是多大,是不是BMP?如果你原本的图像比较小的话,那有可能因为灰度图像需要颜色表的原因导致灰度图比不需要颜色表的24位真彩图还要大。推荐你用UltraEdit参考图片的格式分析一下这两个图片 在matlab中纯粹是像素点的数值,所以灰度图为真彩的1\/3 ...

相似回答