Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV绘制线不适用于透明图像_Python_Opencv_Image Processing_Transparency - Fatal编程技术网

Python OpenCV绘制线不适用于透明图像

Python OpenCV绘制线不适用于透明图像,python,opencv,image-processing,transparency,Python,Opencv,Image Processing,Transparency,我正在制作一个绘图程序,您可以稍后将更改保存并导出为图像。“非透明图像”选项可以完美地工作,但“透明”选项不能。我现在的代码是基于 每当我在“透明”选项中绘制一条线时,图像上都不会显示任何内容。它是完全透明的 printTransparent:,strtransparent 如果不透明: image=np.zerosheight,width,3,np.uint8初始化图像以保存首选项 图像[:]=背景色BGR更改背景色 对于图形中的图形:在每个图形中循环 cv2.lineimage,图纸[0],

我正在制作一个绘图程序,您可以稍后将更改保存并导出为图像。“非透明图像”选项可以完美地工作,但“透明”选项不能。我现在的代码是基于

每当我在“透明”选项中绘制一条线时,图像上都不会显示任何内容。它是完全透明的

printTransparent:,strtransparent 如果不透明: image=np.zerosheight,width,3,np.uint8初始化图像以保存首选项 图像[:]=背景色BGR更改背景色 对于图形中的图形:在每个图形中循环 cv2.lineimage,图纸[0],图纸[1],图纸[2],厚度=图纸[3]创建用户绘制的线 cv2.imwriteyourimage.png,图像 其他: image=np.zerosheight,width,4,dtype=np.uint8 4个通道,而不是3个通道,用于透明图像 对于图形中的图形:在每个图形中循环 cv2.lineimage,图纸[0],图纸[1],图纸[2],厚度=图纸[3] cv2.imwriteyourimage.png,图像
OpenCV绘图功能非常有限,仅用于图像中的简单标记

它们不支持图像中的透明度概念。例如,line方法理解两种模式:三通道彩色线或非三通道灰度线。就这样

结果是,在您的情况下,相同的值被写入所有四个通道。黑线应保持不可见,而白线或蓝线应以白线结束


参考资料:

OpenCV绘图功能非常有限,仅用于图像中的简单标记

它们不支持图像中的透明度概念。例如,line方法理解两种模式:三通道彩色线或非三通道灰度线。就这样

结果是,在您的情况下,相同的值被写入所有四个通道。黑线应保持不可见,而白线或蓝线应以白线结束


参考资料:

多亏了马克·塞切尔,我找到了一个有效的解决方案。在cv2.line中的颜色参数中,传递一个元组,其中前三个值是BGR颜色。第四个值用于透明度/alpha。因此,如果要在透明图像上绘制,您的代码应该看起来像cv2.linecolor=0、0、200、255等等。

多亏了Mark Setchell,我找到了一个有效的解决方案。在cv2.line中的颜色参数中,传递一个元组,其中前三个值是BGR颜色。第四个值用于透明度/alpha。所以,如果你想绘制一个透明的图像,你的代码应该看起来像CV2.LeCeCor 0, 0, 200,255等。谢谢你的帮助,但是我发现这个帖子使用C++中的OpenCV来完成我想要的:我只是不知道如何把它翻译成Python。谢谢你的反馈。我再次查看了代码,查找的源代码是非抗锯齿行。别名版本确实支持四个频道。谢谢你的帮助,但是我发现这个帖子使用了C++中的OpenCV,这正是我想要的:我只是不知道如何把它翻译成Python。谢谢你的反馈。我再次查看了代码,查找的源代码是非抗锯齿行。别名版本确实支持四个通道请参见。请尝试将color=b、g、r、a添加到cv2.line的参数中。我特别指4个值,因此包括透明度/α。使a等于255。或者尝试拆分通道,将前3个绘制为BGR,最后一个绘制为灰度,然后与np.dstack重新组合。非常感谢您的帮助!请回答这个问题,因为我知道这会帮助其他人。我还没有测试过这个问题,所以我不愿意把它作为一个答案。如果你已经让它工作,做我的客人,添加你的代码作为答案,接受你自己的答案并抓住要点。祝你好运尝试将color=b、g、r、a添加到cv2.line的参数中。我特别指4个值,因此包括透明度/α。使a等于255。或者尝试拆分通道,将前3个绘制为BGR,最后一个绘制为灰度,然后与np.dstack重新组合。非常感谢您的帮助!请回答这个问题,因为我知道这会帮助其他人。我还没有测试过这个问题,所以我不愿意把它作为一个答案。如果你已经让它工作,做我的客人,添加你的代码作为答案,接受你自己的答案并抓住要点。祝你好运