gpt4 book ai didi

java - Android OpenCV 提高检测质量

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:43 26 4
gpt4 key购买 nike

目前我正在开发一个应用程序,它将检测照片中的圆圈。我已经设法为此编写了一个代码,但如果我的手机离 PC 屏幕有点远,它就会出现误报或误报。我怎样才能改善结果?我的意思是,有很多应用程序可以检测到小而不清楚的圆圈。

[更新]

我正在摆弄 GaussianBlurHoughCircles 中的值。改变Imgproc.GaussianBlur(grayMat, grayMat, new Size(9, 9), 2, 2);Imgproc.GaussianBlur(grayMat, grayMat, new Size(9, 9), 9, 9); 和 double param1 = 70, param2 = 72;double param1 = 50, param2 = 52; 改进了结果,但还不够。

            Mat mat = new Mat(bitmap.getWidth(), bitmap.getHeight(),
CvType.CV_8UC1);
Mat grayMat = new Mat(bitmap.getWidth(), bitmap.getHeight(),
CvType.CV_8UC1);

Utils.bitmapToMat(bitmap, mat);

int colorChannels = (mat.channels() == 3) ? Imgproc.COLOR_BGR2GRAY
: ((mat.channels() == 4) ? Imgproc.COLOR_BGRA2GRAY : 1);

Imgproc.cvtColor(mat, grayMat, colorChannels);


Imgproc.GaussianBlur(grayMat, grayMat, new Size(9, 9), 2, 2);

// accumulator value
double dp = 1.2d;
// minimum distance between the center coordinates of detected circles in pixels
double minDist = 100;


int minRadius = 0, maxRadius = 0;

double param1 = 70, param2 = 72;


Mat circles = new Mat(bitmap.getWidth(),
bitmap.getHeight(), CvType.CV_8UC1);


Imgproc.HoughCircles(grayMat, circles,
Imgproc.CV_HOUGH_GRADIENT, dp, minDist, param1,
param2, minRadius, maxRadius);


int numberOfCircles = 9;

if (numberOfCircles > circles.cols()){
numberOfCircles = circles.cols();
}


for (int i=0; i<numberOfCircles; i++) {



double[] circleCoordinates = circles.get(0, i);



if(circleCoordinates == null){
break;
}



int x = (int) circleCoordinates[0], y = (int) circleCoordinates[1];

Point center = new Point(x, y);
android.graphics.Point centerC = new android.graphics.Point(x, y);

int radius = (int) circleCoordinates[2];



Core.circle(mat, center, radius, new Scalar(0,
255, 0), 4);


Core.rectangle(mat, new Point(x - 5, y - 5),
new Point(x + 5, y + 5),
new Scalar(0, 128, 255), -1);

提前致谢。

现在我使用那些 A 形点来测试代码,但我想检测照片上更小的圆圈。 enter image description here

最佳答案

我认为,如果你只想检测白色圆圈,你需要实现颜色检测。它不仅会大大提高检测质量,而且会去除大量的误报和漏报。使用颜色检测非常简单,因为它已经存在于 OpenCV 中。为此,请使用 Core.inRange 函数。您可以找到更多相关信息 here .但对你来说最好的可能是关注 this教程。它是用 Python 编写的,但它是可以理解的,您只需更改几行即可使其适用于 Android。希望这会有所帮助:)

关于java - Android OpenCV 提高检测质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234747/

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