如何用c++语言算法判断一幅图片是白天还是黑夜
1个回答
展开全部
1、你必须要假设图片的场景,不然,室内的情况是无法判断的,因为你打开白炽灯鬼知道白天还是夜晚,所以色阶是无法判断室内的情况的。
2、按照上述原因,我只能给你户外的办法,而且也不会太准确,为方便起见,以Qt为例吧。
使用QImage类导入图片
建立一个色彩的大小于号判断操作符,并假设你所需要的色阶偏移量,如RGB(0,0,0)是黑色,那么你假定小于RGB(20,20,20)都作为夜晚判断的计数器。
通过QImage::pixelColor(int x,int y)函数,利用for循环遍历x,y你需要的图片范围,例如调用QImage::height()函数获得图片的高度,然后折半或你喜欢的高度传递给y。
然后上面那个计数器的数值要是大于x*y/2则夜晚。
伪代码如下:(我发现没有了代码田)
QImage img(path);
int height = img.height()/3;
int width = img.width();
int cnt = 0;
int fleid = height*width;
const color nightColor = color(20,20,20);
for(int x=0;x!=width;x++)
for(int y=0;y!=height;y++)
if(nightColor>img.pixelColor(x,y))
cnt++;
if(cnt>fleid/2)
cout<<"夜晚";
大致就是这思路
2、按照上述原因,我只能给你户外的办法,而且也不会太准确,为方便起见,以Qt为例吧。
使用QImage类导入图片
建立一个色彩的大小于号判断操作符,并假设你所需要的色阶偏移量,如RGB(0,0,0)是黑色,那么你假定小于RGB(20,20,20)都作为夜晚判断的计数器。
通过QImage::pixelColor(int x,int y)函数,利用for循环遍历x,y你需要的图片范围,例如调用QImage::height()函数获得图片的高度,然后折半或你喜欢的高度传递给y。
然后上面那个计数器的数值要是大于x*y/2则夜晚。
伪代码如下:(我发现没有了代码田)
QImage img(path);
int height = img.height()/3;
int width = img.width();
int cnt = 0;
int fleid = height*width;
const color nightColor = color(20,20,20);
for(int x=0;x!=width;x++)
for(int y=0;y!=height;y++)
if(nightColor>img.pixelColor(x,y))
cnt++;
if(cnt>fleid/2)
cout<<"夜晚";
大致就是这思路
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询