我制作的项目用于读取图片,然后检测其中的轮廓,然后返回检测到的最大区域。
但是我尝试了这张照片(吼叫)它似乎没有按照我想要的方式工作, 通常它应该返回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);
我在代码中犯了什么错误?有没有更好的方法来解决这个问题?