Mat contours = new Mat(); Imgproc.findContours(threshold, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE); contours 类型错误
时间: 2023-12-09 17:06:25 浏览: 26
在使用 `findContours()` 函数时,`contours` 参数需要是一个 `List<MatOfPoint>` 类型的变量,你可以尝试如下代码:
```
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(threshold, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
```
其中,`hierarchy` 参数也需要传入一个 `Mat` 类型的变量,用于存储轮廓的层级关系。这个参数可以不用,但是需要传入一个空的 `Mat` 变量,即 `new Mat()`。
相关问题
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
`contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)` 这行代码使用了OpenCV库中的`cv2.findContours`函数来获取图像中的轮廓。其中,`cv2.RETR_EXTERNAL`参数表示只检测最外层的轮廓,`cv2.CHAIN_APPROX_SIMPLE`参数表示仅存储轮廓的端点。
contours, hierarchy = cv2.findContours(dilate, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
这是一个OpenCV中的函数,用于在二进制图像中查找轮廓。其中,dilate是输入的二进制图像,cv2.RETR_TREE是轮廓检索模式,cv2.CHAIN_APPROX_SIMPLE是轮廓逼近方法。函数返回两个值,第一个是轮廓本身,第二个是轮廓的层次结构信息。
下面是一个使用该函数的例子:
```python
import cv2
# 读取图像
img = cv2.imread('example.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 膨胀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
dilate = cv2.dilate(thresh, kernel)
# 查找轮廓
contours, hierarchy = cv2.findContours(dilate, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```