利用opencv工具识别文件夹中所有图像中的楼宇的窗户数量。编写代码,利用opencv工具结合所学的图像处理技术能够准确识别并用绿色框框选出楼宇中的窗户,且在终端输出窗户的数量,其中楼宇中过大或过小的部分不能被视为窗户,不框出也不计入窗户数量
时间: 2024-10-23 13:07:12 浏览: 85
为了利用OpenCV识别文件夹中所有图像中的窗户,我们需要进行以下步骤:
1. **安装依赖**:首先确保已经安装了Python和OpenCV库。你可以通过pip进行安装:
```
pip install opencv-python numpy
```
2. **读取图像**:遍历指定文件夹内的所有图片文件,如`.jpg`或`.png`:
```python
import cv2
import os
folder_path = 'path_to_your_folder'
images = [os.path.join(folder_path, img) for img in os.listdir(folder_path) if img.endswith('.jpg') or img.endswith('.png')]
```
3. **预处理图像**:
- 转换为灰度图像,减少计算复杂性
- 二值化处理,提取窗户边缘
- 使用阈值来去除过大或过小的区域,只保留合适的窗口候选区域
```python
def preprocess_image(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
return contours
contours_list = []
for img_path in images:
img = cv2.imread(img_path)
contours = preprocess_image(img)
contours_list.append(contours)
```
4. **窗口计数**:
- 遍历每个图层的轮廓,检查是否符合窗户的大小范围(例如,最小面积和最大面积)
- 绘制绿色框,并记录有效窗户的数量
```python
window_size_min, window_size_max = (100, 100), (500, 500) # 根据实际需求调整尺寸
windows_count = 0
for img_contours in contours_list:
for contour in img_contours:
x, y, w, h = cv2.boundingRect(contour)
area = w * h
if window_size_min[0] <= area <= window_size_max[0] and window_size_min[1] <= area <= window_size_max[1]:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) # 绿色框
windows_count += 1
```
5. **输出结果**:
- 显示带有窗户标记的图片
- 输出总窗户数量到终端
```python
for i, img in enumerate(images):
cv2.imshow(f"Image {i+1}", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(f"Total windows found: {windows_count}")
```
6. **完整代码示例**:
```python
... (以上所有代码放在一起)
```
运行此代码后,它将在终端打印出每个图像中的窗户总数,并显示带有绿色框的图片。
**
阅读全文