利用opencv矩形检测代码(图片中存在多个矩形)
时间: 2023-12-03 11:42:45 浏览: 42
可以使用 OpenCV 中的 `cv2.rectangle()` 函数来绘制矩形,结合 `cv2.findContours()` 函数来寻找图像中的轮廓,从而实现矩形检测。
以下是一个示例代码,可以检测图像中的所有矩形,并用矩形框标识出来:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 寻找图像中的轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制矩形框
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 显示结果
cv2.imshow('rectangles', img)
cv2.waitKey(0)
```
注意,这个代码只是简单地绘制了所有矩形框,如果你需要更加精确地检测矩形,可能需要进行一些额外的处理,比如过滤掉面积过小的矩形等。
相关问题
opencv外接矩形代码
以下是回答:
可以使用 OpenCV 中的函数 cv::boundingRect() 来计算轮廓的外接矩形。具体代码如下:
cv::Mat image = cv::imread("image.jpg");
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
cv::threshold(gray, gray, , 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(gray, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
cv::Rect boundingRect = cv::boundingRect(contours[]);
cv::rectangle(image, boundingRect, cv::Scalar(, , 255), 2);
cv::imshow("image", image);
cv::waitKey();
注意:以上代码仅适用于单个轮廓的情况。如果有多个轮廓,需要在循环中计算每个轮廓的外接矩形。
opencv绘制多个轮廓矩形
要绘制多个轮廓矩形,可以使用 OpenCV 中的 `cv2.rectangle()` 函数。该函数可以接受多组坐标参数,分别绘制多个矩形。具体的步骤如下:
1. 读入图像并进行预处理,找到轮廓。
```python
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
```
2. 循环绘制矩形。
```python
for contour in contours:
# 计算轮廓的矩形边界框
x, y, w, h = cv2.boundingRect(contour)
# 绘制矩形
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
```
在上面的代码中,我们循环遍历所有的轮廓,计算每个轮廓的矩形边界框,并使用 `cv2.rectangle()` 函数绘制矩形。函数的参数分别是图像、左上角坐标、右下角坐标、颜色、线宽。
最后,可以使用 `cv2.imshow()` 函数显示绘制好的图像。
```python
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```