gpt4 book ai didi

java - 如何在Android Studio中使用OpenCV检测和计数随机大小的白色物体

转载 作者:行者123 更新时间:2023-12-02 17:34:35 25 4
gpt4 key购买 nike

我正在尝试使用OpenCV在Android Studio中制作一个应用,该应用主要查看一组点的图像并提取所有亮点,然后对其进行计数。点的形状不一致,但点的颜色应为白色,黑色背景。

我首先上传这样的图像:
Original Image

然后,我获取图像的位图并将其转换为灰度。然后,我检查灰度值是否在一个范围内,并返回二进制值的位图。返回的图像如下所示:

Processed Image

我尝试了几种不同的方法来计算这些点,包括使用Imgproc.findContours以及遵循诸如this one之类的教程,但均未成功,但我没有寻找特定的形状。一次最多只能是1至50个像素的分组,其rgb值为225、255、255和不规则形状。如何计算这些单独的形状?

这是我的代码的图像处理部分,countNonZero部分只是让我知道有多少个白色像素,对于此特定图像,这是179个

public void convertToGray(View v){
int whitePix;
Mat Rgba = new Mat();
Mat grayMat = new Mat();
Mat dots = new Mat();
BitmapFactory.Options o = new BitmapFactory.Options();
o.inDither=false;
o.inSampleSize=4;

int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();

grayBitmap = Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);


//bitmap to MAT

Utils.bitmapToMat(imageBitmap,Rgba);

Imgproc.cvtColor(Rgba,Rgba,Imgproc.COLOR_RGB2GRAY);

Core.inRange(Rgba,scalarLow,scalarHigh,grayMat);

whitePix = Core.countNonZero(grayMat);

Utils.matToBitmap(grayMat,grayBitmap);

MediaStore.Images.Media.insertImage(getApplicationContext().getContentResolver(), grayBitmap, "Result", "Descrip");

mImageView.setImageBitmap(grayBitmap);



}

在将图像上传到应用程序后单击按钮时,将调用此函数。

最佳答案

我使用此代码遍历模板匹配结果Mat以查找可能的匹配。

public static List<Point> getPointsFromMatAboveThreshold(Mat m, float t){
List<Point> matches = new ArrayList<Point>();
FloatIndexer indexer = m.createIndexer();
for (int y = 0; y < m.rows(); y++) {
for (int x = 0; x < m.cols(); x++) {
if (indexer.get(y,x)>t) {
System.out.println("(" + x + "," + y +") = "+ indexer.get(y,x));
matches.add(new Point(x, y));
}
}
}
return matches;
}

这将为您提供一定数量白色的坐标列表。然后,您需要将那些

关于java - 如何在Android Studio中使用OpenCV检测和计数随机大小的白色物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com