如何区别一幅图像是否是黑白图像
来源:互联网 发布:免费会计软件 说明书 编辑:程序博客网 时间:2024/05/19 09:04
这篇文章的思路是很清晰的,但是个人觉得这样判断太耗时,在实际做工程的时候完全可以多判断一些样本点来节约时间
其实按理说这并不是一件困难的工作,但是由于种种原因,在OpenCV中读取的黑白图像并不是我们想像的只有一个通道,而是3通道的。但是当我们使用Mat image = imread("D:/picture/images/baboon2.jpg",0);之后,不论是彩色图像还是黑白图像都会转换为单通道。明白了这个之后,我们的程序就简单了:
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- #include <iostream>
- using namespace cv;
- int main()
- {
- //Mat image = imread("D:/picture/images/baboon2.jpg",0);
- //Mat image = imread("D:/picture/images/baboon2.jpg");
- //Mat image = imread("D:/picture/images/binary.bmp");
- Mat image = imread("D:/picture/image.png");
- if(!image.data)
- return -1;
- int row = image.rows;
- int col = image.cols;
- int cnt= 0;
- for(int i = 0; i < row;i++)
- {
- for(int j = 0; j<col;j++)
- {
- if(image.channels() ==3)
- {
- if( (int)(image.at<Vec3b>(i,j)[0]) != 0 && (int)(image.at<Vec3b>(i,j)[0]) != 255 &&
- (int)(image.at<Vec3b>(i,j)[1]) != 0 && (int)(image.at<Vec3b>(i,j)[1]) != 255 &&
- (int)(image.at<Vec3b>(i,j)[2]) != 0 && (int)(image.at<Vec3b>(i,j)[2]) != 255)
- {
- cnt++;
- }
- }
- else if(image.channels() ==1)
- {
- if((int)(image.at<uchar>(i,j)) != 0 && (int)(image.at<uchar>(i,j)) != 255)
- {
- cnt++;
- }
- }
- }
- }
- if(cnt == 0)
- {
- std::cout<<"这是黑白图像"<<std::endl;
- }
- else
- {
- std::cout<<"这是不是黑白图像"<<std::endl;
- }
- //显示图像以验证结果
- imshow("图像",image);
- waitKey(0);
- return 0;
- }
只需要判断每个像素值是否为0或者255就行了,如果都不是,那么就不是黑白图像。
0 0
- 如何区别一幅图像是否是黑白图像
- 我的OpenCV学习笔记(22):如何区别一幅图像是否是黑白图像
- 判断图像是黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像
- 黑白图像,灰度图像和彩色图像的区别
- [GDI+]如何将一个彩色图像转换成黑白图像
- 如何将一个彩色图像转换成黑白图像
- 如何将一个彩色图像转换成黑白图像
- $(document).ready、body.Onload()和 $(window).load的区别
- CentOS Linux上的phantomjs安装教程
- F5 BIG-IP LTM 负载均衡器 功能介绍 下篇
- 将一组图片播放成动态图
- 机器翻译之句子对齐
- 如何区别一幅图像是否是黑白图像
- bash脚本中的一些特殊字符的用法
- beagleboen black 的i2c应用编程
- 【SDK编程】
- jlink-swd四线连接
- 关于 eclipse 和 tomcat under ubuntu14.04
- MIT算法导论——第一讲.Analysis of algorithm
- 解决jsp插入数据库中的数据出现乱码问题
- ECShop后台管理菜单修改