如何区别一幅图像是否是黑白图像

这篇文章的思路是很清晰的,但是个人觉得这样判断太耗时,在实际做工程的时候完全可以多判断一些样本点来节约时间

其实按理说这并不是一件困难的工作,但是由于种种原因,在OpenCV中读取的黑白图像并不是我们想像的只有一个通道,而是3通道的。但是当我们使用Mat image = imread("D:/picture/images/baboon2.jpg",0);之后,不论是彩色图像还是黑白图像都会转换为单通道。明白了这个之后,我们的程序就简单了:

[cpp] view
plain
copy

  1. #include <opencv2/core/core.hpp>  
  2. #include <opencv2/highgui/highgui.hpp>  
  3. #include <iostream>  
  4. using namespace cv;  
  5. int main()  
  6. {  
  7.     //Mat image = imread("D:/picture/images/baboon2.jpg",0);  
  8.     //Mat image = imread("D:/picture/images/baboon2.jpg");  
  9.     //Mat image = imread("D:/picture/images/binary.bmp");  
  10.     Mat image = imread("D:/picture/image.png");  
  11.   
  12.   
  13.     if(!image.data)  
  14.         return -1;  
  15.       
  16.     int row = image.rows;  
  17.     int col = image.cols;  
  18.     int cnt= 0;  
  19.     for(int i = 0; i < row;i++)  
  20.     {  
  21.         for(int j = 0; j<col;j++)  
  22.         {  
  23.             if(image.channels() ==3)  
  24.             {  
  25.   
  26.                   
  27.                 if( (int)(image.at<Vec3b>(i,j)[0]) != 0 &&  (int)(image.at<Vec3b>(i,j)[0]) != 255 &&   
  28.                     (int)(image.at<Vec3b>(i,j)[1]) != 0 &&  (int)(image.at<Vec3b>(i,j)[1]) != 255 &&   
  29.                     (int)(image.at<Vec3b>(i,j)[2]) != 0 &&  (int)(image.at<Vec3b>(i,j)[2]) != 255)  
  30.                 {  
  31.                     cnt++;  
  32.                 }  
  33.                   
  34.             }  
  35.             else if(image.channels() ==1)  
  36.             {  
  37.                 if((int)(image.at<uchar>(i,j)) != 0 &&  (int)(image.at<uchar>(i,j)) != 255)  
  38.                 {  
  39.                     cnt++;  
  40.                 }  
  41.             }  
  42.         }  
  43.     }  
  44.     if(cnt == 0)  
  45.     {  
  46.         std::cout<<"这是黑白图像"<<std::endl;  
  47.     }  
  48.     else  
  49.     {  
  50.         std::cout<<"这是不是黑白图像"<<std::endl;  
  51.     }  
  52.       
  53.     //显示图像以验证结果  
  54.     imshow("图像",image);  
  55.     waitKey(0);  
  56.     return 0;  
  57. }  

只需要判断每个像素值是否为0或者255就行了,如果都不是,那么就不是黑白图像。

时间: 2024-08-22 09:35:42

如何区别一幅图像是否是黑白图像的相关文章

亦是疑难杂症、WPF:我用photoshop建了一幅3*3的png图像,然后,用下面代码读取这幅图像所有9个点的Argb值,发现某些点有偏差。不解不解。!

问题描述 备注:下面D:3.png是我用photoshop建立的一幅3*3的png图像,其中9个点的颜色分别是:赤橙黄黑白绿青蓝紫.<Windowx:Class="Test.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title

不用图像组件的ASP图像计数器

计数器 前几天看了netnice和qzsage君的贴子,颇有启发,于是着手编了一个图像计数器,这个图像计数器没有用图像组件,也不是以前那样用几张图片拼起来,而是用了*.xbm的图片格式.这种格式可能只能在Windows+IE下才能显示.具体的思路是这样:图片用点阵的形式表示,比如2: 00111100 0011为3 1100为C 即0x3c01100110 0110为6 0110为6 0x6601100000 ....... 0x表示十六进制数.01100000 依此类推00110000 这是用

不能ASP图像组件来生成图像的ASP计数器程序(一)

程序|计数器 不能ASP图像组件来生成图像的ASP计数器程序这是我去年编的一个ASP程序,那时用惯了C语言,所以对Basic反而忘了,但由于觉得ASP很热门,所以试着编了这个程序,程序没经过优化,代码很长,主要是数据那时候不知道该怎么用:) 别笑我,因为现在我会用啦!!这是个简单的计数器申请系统,采用文本,所以只要是支持ASP的空间就都可以测试!!其中TXT目录放的是所有人的计数文本文件number是用来统计当前申请计数器的最大人数 初始化内容为0apply.asp applycheck.asp

PowerPoint2013怎么创建图像特效及裁剪图像

  PowerPoint2013怎么创建图像特效及裁剪图像           1.启动PowerPoint 2013并创建新文档,在幻灯片中插入图片.选择图片,在"图片工具-格式"选项卡的"图片样式"组中单击"快速样式"列表框上的"其他"按钮打开PowerPoint的预设图片样式列表,单击列表中的选项即可将其应用到图片,如图1所示. 图1 对图片应用预设图片样式 2.在"图片工具-格式"选项卡的"

图像处理-识别具有平移,旋转的图像,并与图像比对,粗率计算出平移度与旋转度

问题描述 识别具有平移,旋转的图像,并与图像比对,粗率计算出平移度与旋转度 给出一张发生了旋转和平移的图像,和源图像进行比对,计算旋转了多少度,平移了多少,且两张图片并不是完全一样的,,略有差别 解决方案 http://www.cesclub.com/bw/jishuzhongxin/bianchengyuyan/2013/0313/56734.html 解决方案二: 你百度搜索一下"傅里叶梅林变换",可以找到好多资料.可以对旋转和平移的相似图像进行配置.能够计算出平移量和旋转.

制作黑白图像中的彩色效果

实现效果:一张全色彩图片,需要灰度化,但必须保留区域块的彩色化. 制作目的:熟悉使用套索工具.Fw滤镜 制作步骤: 1.打开处理的图片 2.我们需要将图片中的手掌保留成彩色,而图片背景都转成黑白双色. 3.选择工具栏中的"多边形套索工具",选择属形面板中的"边缘,消除锯齿",将手掌图形勾选出来.这一步需要心细. 4.手掌部分呈现闪动虚线框,表明为选择区. 5.在选区内,点击右键,选择快捷菜单中的"修改选取框.反选". 6.先处理背景色,选择&qu

PS给黑白图像的快速上色及更换背景

教程上色部分比较简单,直接用一个渐变映射上好底色,微调一下细节颜色,增加一些彩妆即可.不过在上色之前作者把人物抠取出来,这样换背景就非常方便. 原图 <点小图查看大图> photoshop教程最终效果 1.双击背景图像,解锁.点击图层面板下面的小文件夹图标新建一个组,命名组"女孩",把背景复制一层移到新建的组里面. 选择钢笔工具绘制下图路径.不要担心现在的头发分开.保存路径.然后调成路径的选区,羽化0.5px,把选区部分的图像按Ctrl + J 复制到新层. 分类: PS图

利用photoshop给黑白图像的快速上色及更换背景方法

原图 <点小图查看大图>   最终效果   1.双击背景图像,解锁.点击图层面板下面的小文件夹图标新建一个组,命名组"女孩",把背景复制一层移到新建的组里面. 选择钢笔工具绘制下图路径.不要担心现在的头发分开.保存路径.然后调成路径的选区,羽化0.5px,把选区部分的图像按Ctrl + J 复制到新层.     2.进入通道面板,把红色通道复制一层,按Ctrl + M 调整曲线,稍微压暗,如下图.   3.按Ctrl + I 把红副本通道反相,调出勾出人物图层选区,回到红副

Visio中如何绘制黑白图像