OpenCV:findContours方法无法正常工作

时间:2018-01-23 15:25:26

标签: java opencv

我制作的项目用于读取图片,然后检测其中的轮廓,然后返回检测到的最大区域。

但是我尝试了这张照片(吼叫)它似乎没有按照我想要的方式工作, 通常它应该返回T恤区域,而是返回另一个区域

这是代码

Mat img = Imgcodecs.imread(imageURL);
Mat gray = new Mat();
Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.Canny(gray, gray, 100, 200, 3, false);
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(gray, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
double maxVal = 0;
int maxValIdx = 0;
for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++)
{
    double contourArea = Imgproc.contourArea(contours.get(contourIdx));
    if (maxVal < contourArea)
    {
        maxVal = contourArea;
        maxValIdx = contourIdx;
    }
}

Imgproc.drawContours(img, contours, maxValIdx, new Scalar(0,255,0), 5);

这是输入图片
tshirt.jpg

这是输出
tshirt.jpg

我在代码中犯了什么错误?有没有更好的方法来解决这个问题?

0 个答案:

没有答案