gpt4 book ai didi

python - 加粗一个像素线

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:57 29 4
gpt4 key购买 nike

我正在使用 OpenCV 在 Python 上进行一些图像处理。我正在尝试在轮廓由蒙版制作的图像上叠加轮廓。我正在使用 cv2.Canny() 获取 mask 的轮廓,然后使用 cv2.cvtColor() 将其更改为颜色,最后将该边缘转换为青色使用 outline[np.where((outline == [255,255,255]).all(axis=2))] = [180,105,255]。我现在的问题是,这是一条一像素粗的线,在大图像上几乎看不到。除了我使用 cv2.bitwise_or(img, outline) 在我的彩色图像上应用蒙版的点外,这个轮廓都是 [0,0,0]

我目前正在通过暴力破解和检查位图中的每个像素来加粗此轮廓,以检查其相邻像素是否为 [180,105,255],如果是,该像素也会发生变化。这很慢。有没有办法使用 numpy 或 openCV 自动执行此操作?我希望用 numpy 进行一些条件索引,但找不到任何东西。

最佳答案

这里根据情况分两种方法:


示例

使用这个输入图像

enter image description here

import cv2
import numpy as np

# Create test image
mask = np.zeros((200,200,3), dtype=np.uint8)
cv2.line(mask, (50, 100), (150, 100), (255,255,255), 1)

方法#1

前景中的所有像素(白色)的面积都会随着 cv2.dilate() 的增加而增加。我们创建一个 structuring element并扩张。更多的迭代将产生更粗的线

iterations=1(左),iterations=2(中),iterations=3(右)

enter image description here enter image description here enter image description here

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
dilate = cv2.dilate(mask, kernel, iterations=1)

方法#2

当我们只想增强图像的特定部分而其他部分保持不变时,我们可以使用 cv2.drawContours()。我们可以使用 thickness 参数指定颜色和调整大小。结果将类似于 cv2.dilate(),但增加了颜色选择的好处

enter image description here

gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
cv2.drawContours(mask, [c], -1, (255,255,255), thickness=15)

关于python - 加粗一个像素线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895772/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com