【发布时间】:2017-05-27 16:32:32
【问题描述】:
我正在编写一个程序,该程序需要从这张图片中检测红色圆圈。
我尝试过精明的边缘检测并找到轮廓,但没有一个找到这个红色的“圆圈”。我还尝试将其转换为 hsv 并通过颜色检测它,但我无法确定这种颜色的良好范围,也许背景颜色会混淆它?
我在最后一次尝试中放了一段代码..
Mat image = new Mat();
image = Imgcodecs.imread("image.jpg");
Mat hsvImage = new Mat();
Mat grayscaleImage = new Mat();
Mat binaryImage = new Mat();
Imgproc.blur(image, image, new Size(1, 1));
Imgproc.cvtColor(image, hsvImage, Imgproc.COLOR_BGR2HSV);
Imgproc.cvtColor(image, grayscaleImage, Imgproc.COLOR_BGR2GRAY);
Imgproc.equalizeHist(grayscaleImage, grayscaleImage);
Imgproc.Canny(grayscaleImage, grayscaleImage, 50, 150, 3,false);
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(grayscaleImage.clone(), contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
for (int id=0;id<contours.size();id++){
MatOfPoint2f mop2f = new MatOfPoint2f();
contours.get(id).convertTo(mop2f,CvType.CV_32F);
RotatedRect rectangle = Imgproc.minAreaRect(mop2f);
if (rectangle.boundingRect().width>80)
Imgproc.drawContours(image,contours,id,new Scalar(0,255,0));
}
【问题讨论】:
-
这是您的原始输入图像吗?还是您手动标记了那些红色圆圈以突出显示?
-
我手动做了一些改变——那些圆圈没有链接,所以我改变了几个像素来关闭这个区域以改进算法。你认为是 findcontours 和 canny 算法没有找到这些的问题吗?
-
但我认为那些红色的“圆圈”是之前在原始图像上绘制的。
-
我的意思是,您的原始图像是否有那些红色圆圈/半圆形?
-
我认为没有
标签: java opencv geometry detection color-detection