我想创建一个掩码操作......
我有两个相同大小的输入图像(它们是否必须具有相同的深度/通道数?我想成为任何东西,可能是3个通道,CV_32FC3或灰色......)我创建了一个掩模,相同的大小(行和列)
cv::Mat mask = cv::Mat(image1.rows, image1.cols, CV_8UC1);
Run Code Online (Sandbox Code Playgroud)
使用黑色和白色区域创建蒙版.
我想创建一个新的cv :: Mat,它将包含mask1为1的image1和mask2为0的image2.
我看着cv::filter2D和copyTo......又看了看addWeighted,但我不希望他们融合-每张图像的区域应该是完全独立的.roi无济于事 - 面具可能不包含矩形,而是一个或多个多边形.
我找不到能满足我想要的东西.
是否有任何基于掩模组合我的图像的OpenCV功能?或者我是否必须创建自己的,循环遍历行和列?
谢谢.
我试图重构一些代码,使其可测试.其中很大一部分使用#define来填充函数中的重复代码.我试图在实际功能中改变它,但我遇到了绊脚石.
注意:原始代码来自抖动算法
typedef struct{
unsigned char R, G, B;
} RGBTriple;
#define compute_disperse(channel) \
error = ((int)(currentPixel->channel)) - palette.table[index].channel; \
image.pixels[(x+1) + (y+0)*image.width].channel += (error*7) >> 4; \
image.pixels[(x-1) + (y+1)*image.width].channel += (error*3) >> 4; \
image.pixels[(x+0) + (y+1)*image.width].channel += (error*5) >> 4; \
image.pixels[(x+1) + (y+1)*image.width].channel += (error*1) >> 4;
Run Code Online (Sandbox Code Playgroud)
在实际方法里面
RGBTriple* currentPixel = &(image.pixels[x + y*image.width]);
compute_disperse(R);
compute_disperse(G);
compute_disperse(B);
Run Code Online (Sandbox Code Playgroud)
如果我尝试将compute_disperse转换为实际函数,那么我需要以某种方式将"channel"作为R,G或B的值传递.
我试图将它作为unsigned char传递但我收到错误
error: 'struct RGBTriple' has no member named 'channel'
Run Code Online (Sandbox Code Playgroud)
我读到了定义RG和B,但无法使其工作......如何将给定的部分转换为实际的函数,而不是宏?
我正在尝试解决包含UserControls的VB.NET项目(实际上,其中一些显示相同的问题).我试图让他们在x64下构建,但这是不可能的.在x86或AnyCPU中,UserControl构建并显示在工具箱中,因此我可以在需要它的表单中添加或修改它.在x64中,控件从工具箱中消失,我在构建期间收到警告(当前项目构建虽然),我看不到任何表单 - 我收到错误(请参见下文) - 以及需要项目的项目作为导入的表单不会构建.当我研究这些UserControl是什么,以便我可以从头开始重建它们时,我从一本书中下载了代码 - 很棒的学习工具,但我得到了同样的错误:
Could not find type 'Chap15SampleCode.ListSelector'. Please make sure that the assembly that contains this type is referenced. If this type is a part of your development project, make sure that the project has been successfully built using settings for your current platform or Any CPU.
The variable 'ListSelector1' is either undeclared or was never assigned.
Run Code Online (Sandbox Code Playgroud)
我也收到警告,不知道如何处理它们:
Possible problem detected while building assembly 'Chap15SampleCode': Referenced assembly 'mscorlib.dll' targets a different processor
Possible problem detected …Run Code Online (Sandbox Code Playgroud) 是否可以通过询问,将GoogleTest输出为xml文件main()?
我知道我可以更改系统环境变量(有人真的这样做吗?),或者使用命令行参数
--gtest_output = "XML:_path_to_output_file_".
我想做的是让我的程序每次都使用基于项目名称的文件名自动生成xml.当然 - 它不会发生在我的电脑上......
我查看了InitGoogleTest,但我看不到任何可以触摸的内容.
(我想编写实际代码,而不是在postbuild中运行我的程序).
这有什么选择吗?
我已经在一些论坛上阅读到OpenCV默认具有BGR频道顺序。
cv :: Mat也可能具有RGB通道顺序。
灰色转换将指定CV_BGR2GRAY或CV_RGB2GRAY作为参数。
1)除了RGB和BGR之外,还有其他选择吗?
2)有什么方法可以通过代码找出通道的顺序是什么?
谢谢。
我正在尝试学习一些基础知识,但我一直都会遇到错误.
我正在尝试调整cv :: Mat的大小
编辑以阐明我没有加载图像的原因:我试图测试而无法访问外部文件.
但是在代码中,我把int x = M.depth();它读取为0
cv::Mat M(2,2, CV_8UC3, cv::Scalar(0,0,255));
scale = 2;
cv::Size myImageSize;
myImageSize.height = M.rows;
myImageSize.width = M.cols;
cv::Mat ImgCopy = cvCreateImage(myImageSize, M.depth(), M.channels());
..
cv::resize(M, ImgCopy, myImageSize, 0, 0, CV_INTER_LINEAR);
Run Code Online (Sandbox Code Playgroud)
我在cvCreateImage行上收到错误
Input image depth is not supported by function (Unsupported format) in unknown functio, file... \modules\core\src\array.cpp...
Run Code Online (Sandbox Code Playgroud)
我尝试过其他值(CV_32F ...),我得到了同样的错误.
请帮忙 !
我正在学习qt,并试验教科书中的例子.
原始教科书代码具有以下内容,设置为保存并关闭x按钮:
void MainWindow::closeEvent(QCloseEvent *event)
{
if (okToContinue()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
Run Code Online (Sandbox Code Playgroud)
我在其菜单中尝试了一个简单的退出 - 它的工作原理如下:
void MainWindow::close()
{
if (okToContinue()) {
QApplication::quit();
}
}
Run Code Online (Sandbox Code Playgroud)
但我想利用已经编写的closeEvent,所以我用上面的代码替换了
void MainWindow::close()
{
QCloseEvent *event = new QCloseEvent();
closeEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
我通过okToContinue函数实现了检查更改和保存应用程序.但应用程序没有关闭.
我试图通过调试和...我的小理解,似乎有一个关闭信号被发送...
我对此没有很好的理解,有人可以帮我弄清楚我做错了什么以及如何解决它?
(示例代码来自C++ GUI Programming with Qt 4,第3章)
我想实现所选项目的轮换。
我注意到有两个函数:rotate(),它执行立即操作,但不保存项目的旋转;setRotation(),它存储rotation()(尽管它需要重绘导致事件)。
如果我选择单个项目并旋转它,我可以设置
selectedItem->setRotation(selectedItem->rotation() + deg);
Run Code Online (Sandbox Code Playgroud)
这允许该项目存储其旋转,当我需要将其复制到另一个场景时,该项目保留其旋转信息。所以这就是我所需要的。
但尝试旋转多个选定的项目,
foreach(QGraphicsItem *selectedItem, scene()->selectedItems())
{
if(selectedItem->flags() & QGraphicsItem::ItemIsMovable)
{
selectedItem->setRotation(selectedItem->rotation() + deg);
}
}
viewport()->update();
foreach(QGraphicsItem *selectedItem, scene()->selectedItems())
{
qDebug("%f", selectedItem->rotation());
}
Run Code Online (Sandbox Code Playgroud)
这会导致项目绕其自身中心旋转。要求项目围绕选择的中心旋转。其他一切都可以 - 物品将有一个可以稍后使用的轮换。(由 qDebug 显示)
要使项目围绕选择中心旋转:
我尝试过分组、旋转、取消分组。
QGraphicsItemGroup* g = scene()->createItemGroup(scene()->selectedItems());
foreach(QGraphicsItem *selectedItem, scene()->selectedItems())
{
if(!(selectedItem->flags() & QGraphicsItem::ItemIsMovable))
g->removeFromGroup(selectedItem);
}
g->setRotation(g->rotation() + deg);
scene()->destroyItemGroup(g);
viewport()->update();
foreach(QGraphicsItem *selectedItem, scene()->selectedItems())
{
qDebug("%f", selectedItem->rotation());
}
Run Code Online (Sandbox Code Playgroud)
显然,这似乎正是我想要的。
但是将项目复制到另一个场景时,项目没有旋转(它有另一个变换吗?看起来不像)。
qDebug 不显示任何内容 - 就好像项目已从选择中消失,但它们仍然显示选择矩形。(我不清除选择)
按下旋转按钮不会重复旋转。我必须取消选择每个项目,然后重新选择才能再次旋转。
另外 - 即使我删除了锁定的物品 - 它们仍然会旋转。(为什么?)
所以它不起作用。
创建变换而不是旋转...我需要将变换中心设置为选择的中心。试
QPointF origin = scene()->selectedItems().???
QPointF …Run Code Online (Sandbox Code Playgroud) 我创建了自己的类(视图和场景)来显示我添加到其中的图像和对象,甚至在我的视图中实现了放大/缩小功能,但现在我必须添加新功能,我什至不知道如何开始寻找它。
不幸的是 - 我什至不知道如何寻找一些基本的东西,因为“移动”和类似的东西是指拖动对象。
编辑 1
void CustomGraphicView::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() == Qt::MidButton)
{
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
translate(event->x(),event->y());
}
}
Run Code Online (Sandbox Code Playgroud)
试过这个 - 但它正在反向工作。
我有一个继承的类QWidget.在某些情况下,我希望将其设置为禁用.
小部件有一些颜色按钮,它们是从颜色列表中设置的:
void MyWidget::colorUpdate(QString color)
{
if(!color.isEmpty())
{
QString foreground = (QColor(color).lightness() < 125 ? "white" : "black");
m_colorButton->setStyleSheet("color: " + foreground + "; background-color: " + color);
}
}
Run Code Online (Sandbox Code Playgroud)
调用myWidget.setEnabled(enabledOption);禁用窗口小部件,灰显窗口小部件中的所有文本和所有其他项 - 除了这些颜色按钮.
所以我想做自己的行动:
void MyWidget::setWidgetEnabled(bool enabled)
{
this->setEnabled(enabled);
// what else ?
}
Run Code Online (Sandbox Code Playgroud)
如何制作我的按钮 - 我不知道的背景颜色和文字颜色,但按钮确实 - 具有"禁用外观"?
(注意 - 颜色更新也适用于禁用的项目 - 但这并不是很复杂 - 无论我在设置小部件禁用时应用的样式表都可以在colorUpdate函数中应用).
我只是不知道如何应用具有灰色阴影的样式表 - 或者样式表中可能还有"禁用"选项..."禁用"中的
颜色是什么样的?
我需要像图像中那样设置一些滚动条的样式:
经过大量的痛苦和实验,我找到了如何制作渐变并隐藏箭头。
m_scrollBarStyleSheet = "QScrollBar:horizontal { \n "
" background-color: qlineargradient(x1: 1, y1: 0.5, x2: 0, y2: 0.5, stop: 0 magenta, stop: 1 #FFFFFF); \n "
" border: 1px solid black; \n"
" height: 35px; \n "
" width: 261px; \n"
" margin: 0 0 0 0; \n "
"} \n "
"QScrollBar::handle:horizontal { \n"
" background-color: silver; \n"
" border: 1px solid grey; \n"
" height: 55px; \n" // seems to do nothing
" width: 2px; \n" // seems …Run Code Online (Sandbox Code Playgroud) 我有一个QGraphicsView子类,其中包含一个子QGraphicsScene类QWidget。
将QGraphicsScene具有在(0,0)顶端让拐角处的实际绘制矩形(让现场真正具有QRectF(-x,-y,w,h)价值无关的问题)。
在启动时,实际上是在showEvent小部件的中,我将场景的大小设置为适合自定义大小的矩形。这也使它居中。
我想要的是,在开始时将场景的(0,0)点与视图的左上角匹配。
与其他具有相同标题的问题不同,我实际上需要移动视图,而不是场景中的项目。
图片1:实际开始,图片2:所需
我在尝试:
void MyWidget::showEvent(QShowEvent *event)
{
static bool startUp = true;
if(startUp)
{
QSizeF sz = m_scene->getActualSize();
ui->graphicsView->fitInView(QRectF(0, 0, sz.width(), sz.height()), Qt::KeepAspectRatio);
QPointF zero = ui->graphicsView->mapFromScene(QPointF(0,0));
ui->graphicsView->translate(-zero.x(), -zero.y()); // or positive
startUp = false;
}
QWidget::showEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
注意:我使用fitInView来获得所需的缩放-它也使所需的矩形聚焦-但在视图中居中。
我也试过
void GraphicsView::alignToZero()
{
QPointF zero = this->mapFromScene(QPointF(0,0));
this->scrollContentsBy(-zero.x(), -zero.y());
}
void MyWidget::showEvent(QShowEvent *event)
{
static bool startUp = true;
if(startUp)
{
QSizeF …Run Code Online (Sandbox Code Playgroud) c++ ×6
qt ×6
opencv ×3
64-bit ×1
build ×1
googletest ×1
macros ×1
qcolor ×1
quit ×1
rotation ×1
selection ×1
stylesheet ×1
unit-testing ×1
vb.net ×1
xml ×1