首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -分析图像中的黑暗

Java -分析图像中的黑暗
EN

Stack Overflow用户
提问于 2013-12-03 02:08:14
回答 2查看 849关注 0票数 1

我有一个罐子,每分钟通过CRON启动,捕捉海滩摄像头图像并将其保存到文件中。因为它运行24*7,所以它保存了无用的夜间图像。我想让这个罐子来分析这个文件并确定它是否是一个“守护者”。

我所能看到的唯一方法(我还没有对其进行编码)是迭代每个像素,查看每个像素的RGB,如果某个像素的百分比完全或接近黑色,就称其为“丢弃”。这是否一个合理的方法?

FWIW,这张照片是安装在清水滩希尔顿上方的照相机,向西南俯瞰海滩和60号码头--地球上的天堂就是这个爱荷华的男孩。

URL=http\://192.163.243.248/webcams/clearwater.jpg

谢谢,克里斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-03 02:22:07

假设您没有使用图像处理库(我不知道有任何免费的开源库,但您可以查看this thread ),更合理的方法是选择一个行子集。例如,每20行检查一次。如果图像的高度是640,那么你只需要看32条线。您只能检查每2或4或任何像素的每一行。基本原理是从一个像素到另一个像素,甚至每条线,像素值不会有太大差别.尤其是在晚上。

使用某种时间范围,这也是有道理的,但可能需要一些调整,因为日出和日落每天变化。

票数 1
EN

Stack Overflow用户

发布于 2013-12-03 03:50:11

最后,我使用了下面的例程来确定一个图像是否值得保留。它每10行每10像素查看一次,如果红色、绿色和蓝色组件之和小于30 (这是我从任何地方提取的数字),则称像素为黑色。如果10% (另一个任意数字)或更多像素为暗,则图像为暗。

代码语言:javascript
复制
private boolean keepImage(BufferedImage bufferedImage){
    int imageHeight = bufferedImage.getHeight();
    int imageWidth = bufferedImage.getWidth();

    long pixelCount = 0;
    long darkPixels = 0;
    for(int y=0;y<imageHeight;y+=10){
        for(int x=0;x<imageWidth;x+=10){
            pixelCount++;
            int rgb = bufferedImage.getRGB(x, y);
            int red = (rgb >> 16) & 0x000000FF;
            int green = (rgb >>8 ) & 0x000000FF;
            int blue = (rgb) & 0x000000FF;
            if (red + green + blue < 30)
                darkPixels++;
        }
    }
    float darkQuotient = (float)darkPixels/(float)pixelCount;
    return darkQuotient<0.1;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20341558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档