python - 绘制 OpenCV 轮廓并保存为透明图像
问题描述
我正在尝试绘制使用 findContours 找到的轮廓。
如果我这样画,我会得到一个黑色背景,上面画着轮廓。
out = np.zeros_like(someimage)
cv2.drawContours(out, contours, -1, 255, 1)
cv2.imwrite('contours.png',out)
如果我这样画,我会得到一个完全透明的图像,没有绘制轮廓。
out = np.zeros((55, 55, 4), dtype=np.uint8)
cv2.drawContours(out, contours, -1, 255, 1)
cv2.imwrite('contours.png',out)
我如何制作尺寸为(55,55)的图像并在其上绘制轮廓,同时保持透明背景?
谢谢
解决方案
要在 OpenCV 中处理透明图像,您需要使用 BGR 之后的第四个通道,称为 alpha 并对其进行控制。因此,不要创建一个三通道图像,而是创建一个具有四个通道的图像,并且在绘图时确保将第四个通道分配给 255。
mask = np.zeros((55, 55, 4), dtype=np.uint8)
cv2.drawContours(mask, cnts, -1, (255, 255, 255, 255), 1) #change first three channels to any color you want.
cv2.imwrite('res.png', mask)
输入要绘制轮廓的图像。
结果
推荐阅读
- c# - 将 NLog 与 Sql Server 一起使用
- java - 如何更新集合中每个文档的值并使其随每个文档递增?
- python-3.x - 避免嵌套循环或优化性能
- c# - 如何创建 csv 文件并将数据写入其中,而不在本地存储物理文件?
- javascript - 如何从 Nestjs 守卫访问数据库
- sql-server - 在存储过程中传递多个参数来搜索数据的最佳方式
- python - 无法杀死线程中的 Python 脚本
- c# - 跳过 MediatR 行为管道
- javascript - 具有来自firebase可调用函数(gaxios)的异步状态值的Vuex getter
- karate - 有什么简单的方法可以替换文本中的数百个占位符