使用OpenCV,如何在检测到的形状/ blob的边缘绘制轮廓?

时间:2016-06-25 10:54:34

标签: android opencv opencv3.0 opencv4android

以下是使用Mat mask = new Mat(); Core.inRange(rgbaMat, lowerThreshold, upperThreshold, mask); ... contours = new ArrayList<>(); Imgproc.findContours(dilatedMat, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); ... for ( int contourIdx=0; contourIdx < contours.size(); contourIdx++ ) { Imgproc.drawContours ( rgbaMat, contours, contourIdx, new Scalar(0, 255, 0), 1); } 在Android应用中检测到的蓝色斑点的图像。我使用Core.inRange()Imgproc.findContours()方法查找轮廓,并使用Imgproc.drawContours()绘制轮廓:

var eachTime = "11.00 am,11.15 am,11.30 am,11.45 am,11.45 am,12.00 pm,12:00  pm,12.15 pm,12:15  pm,12.30 pm";

轮廓(浅绿色边界)位于检测到的形状之外。

因此,正如您所看到的,它还包括检测到的蓝色斑点周围的一些白色区域。我希望轮廓边界位于蓝色斑点/形状的边缘内。

我该怎么做?

enter image description here

2 个答案:

答案 0 :(得分:1)

我可以在你的代码中看到你在变量“dilatedMat”(第5行)上应用了“findContours”。我假设你在“rgbaMat”(第3行的某个地方)上应用了“扩张”过滤器。但是如果你想要轮廓在里面,你应该应用“erode”而不是“dilate”

答案 1 :(得分:0)

您可以在drawContour厚度参数中使用一些负值,这将在检测到的对象内绘制轮廓。

DECLARE @table TABLE ( ID INT, name VARCHAR(50), link VARCHAR(50) )

INSERT INTO @table
VALUES
    ( 3, '10400', '/testsDatas/10400/Uploads' )

INSERT INTO @table
SELECT
    (
    SELECT MAX(ID) 
    FROM @table
    ) + ROW_NUMBER() OVER (ORDER BY ID),
    10500,
    REPLACE( link, name, 10500 )
FROM @table


SELECT *
FROM @table