我正在写一个程序,需要从这张图片中检测出红圈。红色圆圈检测| openCV | Java
我已经试过Canny边缘检测和发现的轮廓,但他们没有找到这个红色的“圈子”。我也尝试将其转换为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));
}
这是你的原始输入图像吗?或者您已手动标记这些红色圆圈以突出显示? – ZdaR
我手动做了一些修改 - 那些圆圈没有链接,所以我改变了几个像素来关闭这个区域来改进算法。你认为这是为什么findcontours和canny算法没有找到那些问题? – Fleczer
但我也认为那些红色的“圆圈”是早先在原始图像上画的。 – Fleczer