def drawGaussian(img, pt, score, sigma=1): tmp_img = np.zeros([img.shape[0], img.shape[1]], dtype=np.float32) tmpSize = 3 * sigma # Check that any part of the gaussian is in-bounds ul = [int(pt[0] - tmpSize), int(pt[1] - tmpSize)] br = [int(pt[0] + tmpSize + 1), int(pt[1] + tmpSize + 1)] if (ul[0] >= img.shape[1] or ul[1] >= img.shape[0] or br[0] < 0 or br[1] < 0): # If not, just return the image as is return img # Generate gaussian size = 2 * tmpSize + 1 x = np.arange(0, size, 1, float) y = x[:, np.newaxis] x0 = y0 = size // 2 # Usable gaussian range g_x = max(0, -ul[0]), min(br[0], img.shape[1]) - ul[0] g_y = max(0, -ul[1]), min(br[1], img.shape[0]) - ul[1] img_x = max(0, ul[0]), min(br[0], img.shape[1]) img_y = max(0, ul[1]), min(br[1], img.shape[0]) g = np.exp(- ((x - x0) ** 2 + (y - y0) ** 2) / (2 * sigma ** 2)) * score g = g[g_y[0]:g_y[1], g_x[0]:g_x[1]] tmp_img[img_y[0]:img_y[1], img_x[0]:img_x[1]] = g img += tmp_img
时间: 2023-10-31 12:04:21 浏览: 87
这段代码实现了一个在图像上画高斯分布的函数。具体来说,它接受一个图像 `img`、一个中心点坐标 `pt`、高斯分布的得分 `score` 和标准差 `sigma` 作为输入。函数会在图像上生成一个以 `pt` 为中心,标准差为 `sigma`,高斯分布得分为 `score` 的二维高斯分布。最后,函数将生成的高斯分布加到原始图像 `img` 上,并返回加和后的结果。
相关问题
def mask_on_rgb_image(mask, img, num_class=3): h, w = img.shape[:2] img_show = np.zeros((h, w, 3)) if len(img.shape) == 3: img_show = img else: img = np.expand_dims(img, axis=2) img_show = np.concatenate((img, img, img), axis=-1) # specify color 1:red 2:green 3:blue img_show[np.where(mask == 1)] = [255, 0, 0] img_show[np.where(mask == 2)] = [0, 255, 0] img_show[np.where(mask == 3)] = [0, 0, 255] return img_show
这是一个 Python 函数,用于在彩色图像上根据给定的掩码(mask)展示不同的区域。具体实现方法如下:
- `mask_on_rgb_image(mask, img, num_class=3)`:函数名称,输入参数包括掩码 mask、彩色图像 img 和分类数 num_class,其中 num_class 默认为3。
- `h, w = img.shape[:2]`:获取图像的高度和宽度。
- `img_show = np.zeros((h, w, 3))`:创建一个与 img 大小相同的全0数组,用于展示掩码效果。
- `if len(img.shape) == 3: img_show = img`:如果 img 是彩色图像,直接将 img 赋值给 img_show,否则需要将 img 转换为彩色图像。
- `else: img = np.expand_dims(img, axis=2) img_show = np.concatenate((img, img, img), axis=-1)`:如果 img 是灰度图像,需要将其转换为彩色图像,具体方法是先在第3个维度上扩展为3维,然后将三个维度上的值连接起来。
- `img_show[np.where(mask == 1)] = [255, 0, 0]`:将掩码中等于1的区域赋值为红色,对应的 RGB 值为 [255, 0, 0]。
- `img_show[np.where(mask == 2)] = [0, 255, 0]`:将掩码中等于2的区域赋值为绿色,对应的 RGB 值为 [0, 255, 0]。
- `img_show[np.where(mask == 3)] = [0, 0, 255]`:将掩码中等于3的区域赋值为蓝色,对应的 RGB 值为 [0, 0, 255]。
- `return img_show`:返回展示掩码效果后的彩色图像。
这个函数通常用于图像分割任务中,通过将不同类别的区域用不同颜色标注出来,可以直观地观察模型的分割效果。
import cv2 def save_image(img, path, nrow=10, padding=5): N,C,W,H = img.shape if (N%nrow!=0): print("N%nrow!=0") return ncol=int(N/nrow) img_all = [] for i in range(ncol): img_ = [] for j in range(nrow): img_.append(img[i*nrow+j]) img_.append(np.zeros((C,W,padding))) img_all.append(np.concatenate(img_, 2)) img_all.append(np.zeros((C,padding,img_all[0].shape[2]))) img = np.concatenate(img_all, 1) img = np.concatenate([np.zeros((C,padding,img.shape[2])), img], 1) img = np.concatenate([np.zeros((C,img.shape[1],padding)), img], 2) min_=img.min() max_=img.max() img=(img-min_)/(max_-min_)*255 img=img.transpose((1,2,0)) if C==3: img = img[:,:,::-1] img_.append
img_.append 的作用是将图像 img_ 添加到 img_all 列表中。这段代码是一个图像拼接的函数,用于将多个图像按照指定的行数和间距进行拼接,并保存为一张大图像。在这个函数中,img_ 是一个包含多个图像的列表,通过循环遍历将每个图像添加到 img_all 中。最后,将 img_all 中的图像按照指定的方式进行拼接,得到最终的大图像 img。
阅读全文