Java 如何计算图像中的面积

Java 如何计算图像中的面积,java,android,opencv,image-processing,Java,Android,Opencv,Image Processing,编辑: 原始图像作为附件,我想找到手上有闪光的区域。我已经处理了图像,以找到所附的闪闪发光的图像 现在,我需要找到图像中的黑色部分。我正在Android Studio上使用OpenCV 守则: int[] allpixels = new int[bitmap_original.getHeight() * bitmap_original.getWidth()]; outputBitmap.getPixels(allpixels, 0, outputBitmap.getWidth(), 0, 0,

编辑: 原始图像作为附件,我想找到手上有闪光的区域。我已经处理了图像,以找到所附的闪闪发光的图像

现在,我需要找到图像中的黑色部分。我正在Android Studio上使用OpenCV

守则:

int[] allpixels = new int[bitmap_original.getHeight() * bitmap_original.getWidth()];
outputBitmap.getPixels(allpixels, 0, outputBitmap.getWidth(), 0, 0, outputBitmap.getWidth(), outputBitmap.getHeight());
double value = 0;
for (int i = 0; i < allpixels.length; i++) {
    value++; 
    //minus the white in the image
    if (allpixels[i] == Color.WHITE) {
        value--;
    }
}
int[]allpixels=new int[bitmap_original.getHeight()*bitmap_original.getWidth()];
getPixels(所有像素,0,outputBitmap.getWidth(),0,0,outputBitmap.getWidth(),outputBitmap.getHeight());
双值=0;
对于(int i=0;i
图像:


编辑:您的新编辑完全改变了问题。在这种情况下,似乎应该通过改进检测闪光的方式,而不是计算面积的方式来解决结果的不精确性。一旦探测得到改善,你就可以按照尤努斯·特穆伦克在回答中的建议计算面积

可能有更复杂的方法,但一个可能产生稍微更好结果的快速破解方法是使用,例如,一系列(免责声明:我在该领域绝对没有专业知识):


是的,它可以做得更好,但即使如此,计算这幅图像中的非零像素可能会比计算原始图像中的非零像素提供更好的面积近似值

由于问题有一个OpenCV标签,这里有几个指向该方向的指针:

  • 签出安装指南(当前站点存在HTTPS问题:Advanced>Procedure应完成此操作)
  • 应用形态开放过滤器(正如Ash正确建议的那样)后,您可以(仅限外部,您需要的是简化)
  • 然后,在从轮廓中导出的许多其他度量中,您可以通过(或对于定向边界框)轻松获得第一个轮廓的面积

  • 如果您只需要计算可以反转图像的像素数,请使用

    您是否真的拍摄了图像的屏幕截图而不是仅使用原始图像?另外,如果你把所有不是白色的都算为黑色,你真的确定图像是黑白格式的,并且没有白色或黑色的像素吗?只计算图像中的黑色像素(0值)。这有什么困难?@YunusTemurlenk我想OP对近似面积很感兴趣,所以他们可能在寻找填补“漏洞”的方法。“但它似乎没有进行精确计算。”你是如何定义“精确计算”的?@MarkusKauppinen,我已经编辑了这个问题,请看一看。谢谢你,谢谢。我可以知道你用什么软件来实现这一点吗?我已经更新了这个问题,你能看一下吗?@aa13579正如代码段开头的评论中所指定的,它是octave(一个开源的matlab克隆,或多或少),但是任何像样的图像处理库都应该有类似的实现。
    #Octave code
    I=imread(your_image);
    
    N=20;
    se=strel("square",20);
    J=I;
    for i=1:N
        J=imopen(J,se);
    end
    
    imagesc(J);