相关疑难解决方法(0)

OpenCV(Emgu.CV) - 用alpha合成图像

我正在使用Emgu.CV来执行一些基本的图像处理和合成.我的图片被加载为Image<Bgra,Byte>.

问题#1:当我使用该Image<,>.Add()方法时,无论alpha值如何,图像总是混合在一起.相反,我希望它们在另一个上面合成,并使用包含的alpha通道来确定图像应该如何混合.因此,如果我调用image1.Add(image2)image2中的任何完全不透明的像素将完全覆盖来自image1的像素,而半透明像素将基于alpha值进行混合.

这就是我想用视觉形式做的事情.有一个城市形象,一些"透明洞"被切掉,后面有一只青蛙.它应该是这样的:

在此输入图像描述

这就是openCV产生的.

这就是OpenCV(Emgu.CV)在我称之为

如何使用OpenCV获得此效果?它会像打电话一样快Add()吗?

问题2:有没有办法就地执行这个组合,而不是每次调用都创建一个新的图像Add()?(例如image1.AddImageInPlace(image2)修改字节 image1?)

注意:在Emgu.CV中寻找答案,我正在使用它,因为它处理透视变形的程度.

opencv alphablending image-processing emgucv

7
推荐指数
1
解决办法
9561
查看次数

QtDesigner中重叠的小部件

我想在QtDesigner中叠加两个小部件:有一个很大的QTextBrowser,右下角的下面应该是一个非交互式标签,我将用它作为一个拖动手柄来调整窗口大小(主要小部件是无框架的所以我需要实现它).通常这个标签将位于QTextBrowser下方,它在grip-label的左侧留下了大量未使用的空间.所以我想把把手标签放在QTextBrowser上面.我想在QtDesigner中实现这一点.但代码看起来像:

QHBoxLayout *layout = new QHBoxLayout(videoWidget);
QLabel *overlayWidget = new QLabel();
overlay->setAlignment(Qt::AlignCenter);
overlay->setText("Overlaid Text");
layout->addWidget(overlay); 
Run Code Online (Sandbox Code Playgroud)

或者正如我在python中所做的那样:self.textedit = QTextBrowser(self); ... gripImage = QLabel(self.textedit);

括号之间的部分是父窗口小部件.

这就是它现在的样子,但这不是我想要的:

在此输入图像描述

qt qt-designer

7
推荐指数
1
解决办法
8008
查看次数

使用 QPainter 用 alpha 值覆盖两个像素图

我正在尝试覆盖 2 个像素图并将它们转换为 QGraphics 场景中的单个像素图。两个像素图在某些位置都是透明的。我想使用此处列出的“SourceOver”混合类型组合贴图:我在下面有一个简单的玩具示例来说明我创建了两个虚拟透明像素图,一个绿色和一个蓝色的问题。实际上,这些地图是从图像加载并绘制的,但是这个例子重现了这个问题。基于此如何在另一个图像的顶部添加图像?,我尝试的方法(注释掉 4 行)是用其中一个像素图创建一个 QPainter,然后在它上面绘制另一个像素图,但是这会导致程序崩溃。有想法该怎么解决这个吗?我最终希望能够保存组合的像素图。

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPixmap, QPainter, QPen, QBrush, QPainterPath
from PyQt5.QtCore import (QLineF, QPointF, QRectF, Qt)

class Viewer(QtWidgets.QGraphicsView):
    def __init__(self, parent):
        super(Viewer, self).__init__(parent)
        self._scene = QtWidgets.QGraphicsScene(self)
        self.photo = QtWidgets.QGraphicsPixmapItem()
        self.label = QtWidgets.QGraphicsPixmapItem()
        self._scene.addItem(self.photo)
        self._scene.addItem(self.label)
        self.setScene(self._scene)        

    def overlayMaps(self):
        blue = QtGui.QPixmap(600, 600) 
        blue.fill(QtGui.QColor(0,0,255,0))
        p = QPainter(blue)
        self.pen = QPen()
        self.pen.setColor(QtGui.QColor(0,0,255,255))
        self.pen.setWidth(10)
        p.setPen(self.pen)
        p.drawLine(0,0,600,600)


        green = QtGui.QPixmap(600, 600)
        green.fill(QtGui.QColor(0,255,0,0))            
        p = QPainter(green)
        self.pen …
Run Code Online (Sandbox Code Playgroud)

python pyqt qpixmap qpainter pyqt5

1
推荐指数
1
解决办法
1579
查看次数