当前位置: 代码迷 >> 综合 >> 在linux上求最小外接矩形(踩坑:error: (-215) total >= 0 (depth == 5 || depth == 4) in function convexHull)
  详细解决方案

在linux上求最小外接矩形(踩坑:error: (-215) total >= 0 (depth == 5 || depth == 4) in function convexHull)

热度:25   发布时间:2023-12-16 07:33:28.0

先给出我们要使用的图片,任务是求出左图中白色部分的最小外接矩形 ,最终结果如右图所示。

 

               

在windows系统中使用opencv的minAreaRect方法,如下所示,即可完成

import cv2
import numpy as npimage = cv2.imread('test.png')
img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img, 230, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:# 找面积最小的矩形rect = cv2.minAreaRect(c)print(np.int0(rect[0]))# 得到最小矩形的坐标box = cv2.boxPoints(rect)# 标准化坐标到整数box = np.int0(box).tolist()print(box)# 画出边界cv2.drawContours(image, [box], 0, (0, 0, 255), 3)
cv2.imshow("img", image)
cv2.imwrite("img_1.jpg", image)
cv2.waitKey(0)

 

在Linux系统中,使用同样的代码会出现cv2.error: /io/opencv/modules/imgproc/src/convhull.cpp:137: error: (-215) total >= 0 && (depth == 5 || depth == 4) in function convexHull这个错误,通过查阅感觉应该是通道不对应的问题,改为如下在Linux系统中可以正常运行

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)ret, binary = cv2.threshold(gray,230,255,cv2.THRESH_BINARY_INV)_, contours, _ = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)for c in contours:rect = cv2.minAreaRect(c)box = cv2.boxPoints(rect)

 

  相关解决方案