import cv2 import glob import numpy as np imgs = glob.glob("maze.png") res, L, N = [], 256, 5 for i in imgs: img = cv2.imread(i) img = cv2.resize(img, (512, 512)) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV) # contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) max_contour = max(contours, key=cv2.contourArea) epsilon = 0.1 * cv2.arcLength(max_contour, True) approx = cv2.approxPolyDP(max_contour, epsilon, True) circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=15, minRadius=5, maxRadius=15) if circles is not None: circles = np.round(circles[0, :]).astype("int") for (x, y, r) in circles: cv2.circle(img, (x, y), r, (0, 0, 255), 2) # edges = cv2.Canny(gray, 100, 200) contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: center, (width, height), angle = cv2.minAreaRect(contour) if -5 <= (width - height) <= 5 and 30 <= width <= 50: cv2.drawContours(img, [contour], -1, (0, 0, 255), 3) res.append(cv2.resize(img, (L, L))) resImg = np.zeros((L * N, L * N, 3), dtype=np.uint8) for i, img in enumerate(res): row, col = i // N, i % N x, y = col * L, row * L resImg[y:y + L, x:x + L] = img cv2.imshow("", resImg) cv2.waitKey(0) cv2.destroyAllWindows()
时间: 2023-12-15 17:05:52 浏览: 151
这是一段Python代码,主要的作用是对给定的maze.png图片进行处理并展示处理后的结果。具体包括以下步骤:
1. 导入cv2、glob和numpy模块。
2. 使用glob模块获取maze.png图片的路径,将其读取并调整大小为512x512。
3. 将图片转化为灰度图,并进行二值化处理。
4. 使用cv2.findContours函数找到图像中的所有轮廓,并选择面积最大的轮廓进行逼近处理。
5. 使用cv2.HoughCircles函数检测图像中的圆形,并在圆形周围画出红色圆圈。
6. 使用cv2.Canny函数进行边缘检测,再次使用cv2.findContours函数找到图像中的所有轮廓。
7. 对于每个轮廓,使用cv2.minAreaRect函数获取其最小外接矩形,并判断其长宽比是否在一定范围内,如果满足条件,则在轮廓周围画出红色矩形。
8. 将处理后的图片添加进一个列表中,并将所有图片通过numpy模块拼接成一个大图展示。
以上就是这段代码的大致执行过程。
相关问题
import glob import numpy as np import torch import os import cv2 from model.unet_model import UNet if __name__ == "__main__": # 选择设备,有cuda用cuda,没有就用cpu device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # 加载网络,图片单通道,分类为1。 net = UNet(n_channels=1, n_classes=1) # 将网络拷贝到deivce中 net.to(device=device) # 加载模型参数 net.load_state_dict(torch.load('best_model.pth', map_location=device)) # 测试模式 net.eval() # 读取所有图片路径 tests_path = glob.glob('../data/data/test/test_image/*.png') # 遍历所有图片 for i in tests_path: # 保存结果地址 save_res_path = '../data/test/test_mask/*res.png' # 读取图片 img = cv2.imread(i) # 转为灰度图 img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 转为batch为1,通道为1,大小为512*512的数组 img = img.reshape(1, 1, img.shape[0], img.shape[1]) # 转为tensor img_tensor = torch.from_numpy(img) # 将tensor拷贝到device中,只用cpu就是拷贝到cpu中,用cuda就是拷贝到cuda中。 img_tensor = img_tensor.to(device=device, dtype=torch.float32) # 预测 pred = net(img_tensor) # 提取结果 pred = np.array(pred.data.cpu()[0])[0] # 处理结果 pred[pred >= 0.5] = 255 pred[pred < 0.5] = 0 # 保存图片 cv2.imwrite(save_res_path, pred) # print(pred) print("successfully save")
这段代码是一个用于图像分割的UNet模型的理代码。首先,它会检查是否有可用的CUDA设备,然后加载UNet模型并将其移动到相应的设备上。接下来,它会遍历所有测试图片的路径,读取并预处理每张图片。然后,使用加载的模型对图片进行预测,并将预测结果进行后处理,得到二值化的分割结果。最后,将结果保存到指定路径上。
值得注意的是,上述代码中的`save_res_path`变量应该是一个具体的文件路径,而不是一个通配符表达式。你需要将`save_res_path`修改为一个具体的文件路径,以保存每张图片的分割结果。
如果你有更多的问题,请继续提问。
import glob import os import sys from pathlib import Path import cv2 as cv import numpy as np import scipy.io from PIL import Image
这是一段 Python 代码,其中导入了一些常用的库,包括:
- glob:用于查找符合特定规则的文件路径名。
- os:提供了许多与操作系统交互的函数。
- sys:提供了许多与 Python 解释器和运行时环境交互的函数。
- pathlib:提供了一种面向对象的路径操作方式。
- cv2:OpenCV 库,用于图像处理和计算机视觉。
- numpy:用于科学计算的 Python 库。
- scipy:用于数学、科学和工程计算的 Python 库。
- PIL:Python Imaging Library,用于图像处理和操作。
这些库可以用于各种各样的任务,例如图像处理、机器学习、数据分析等。
阅读全文