【问题标题】:In opencv4nodejs how to set alpha when calling drawRectangle在opencv4nodejs中调用drawRectangle时如何设置alpha
【发布时间】:2026-01-06 07:15:01
【问题描述】:

我想要一个透明的PNG,除了在正方形上绘制。我可以用 Python 来实现,但我想用 Node 来实现。

如何使用 opencv4nodejs 将此 Python 代码转换为 Node 代码?

import cv2
import numpy as np

blank = np.zeros((400, 500, 4))
cv2.rectangle(blank, (10, 10), (50, 50), (0,255,0,255) )
cv2.imwrite("blankpy.png", blank)

blankpy.png(透明和绘制的正方形):

这是我的尝试,但输出并不完全相同

const cv = require('./lib/opencv4nodejs');

const blank = new cv.Mat(400, 500, cv.CV_8UC4);
blank.drawRectangle(new cv.Rect(10, 10, 50, 50), new cv.Vec4(0, 255, 0, 255), 2, cv.LINE_8);
cv.imwrite('blankjs.png', blank);

blankjs.png(透明,但没有正方形): 如果我像这样稍微改变它,输出不是透明的,但正方形在那里。

const cv = require('./lib/opencv4nodejs');

const emptyMat = new cv.Mat(400, 500, cv.CV_8UC3);
emptyMat.drawRectangle(new cv.Rect(10, 10, 50, 50), new cv.Vec3(0, 255, 0), 2, cv.LINE_8);
cv.imwrite('blankjs.png', emptyMat);

blankjs.png(绿色方块但背景不透明):

【问题讨论】:

    标签: python node.js opencv opencv4nodejs


    【解决方案1】:

    我的解决方法:

    const cv = require('./lib/opencv4nodejs');
    
    const emptyMat = new cv.Mat(400, 500, cv.CV_8UC4, [0,0,0,255]);
    emptyMat.drawRectangle(new cv.Rect(10, 10, 50, 50), new cv.Vec3(255, 0, 255), 2);
    const invertedEmptyMat = emptyMat.bitwiseNot();
    
    cv.imwrite('blankjs.png', invertedEmptyMat);
    

    【讨论】: