我正在创建一个多维MAT对象,并希望得到对象的大小 - 例如,
const int sz[] = {10,10,9};
Mat temp(3,sz,CV_64F);
std::cout << "temp.dims = " << temp.dims << " temp.size = " << temp.size() << " temp.channels = " << temp.channels() << std::endl;
Run Code Online (Sandbox Code Playgroud)
我相信得到的MAT是10x10x9,我想确认一下,但是COUT声明给出了:
temp.dims = 3 temp.size = [10 x 10] temp.channels = 1
我希望看到:
temp.dims = 3 temp.size = [10 x 10 x 9] temp.channels = 1
要么:
temp.dims = 3 temp.size = [10 x 10] temp.channels = 9
如何获得此Mat对象的维度?我在Mat :: Mat或MatND中没有看到任何方法
我对使用Qt进行编程相对较新,并且有一个问题.精简版:
如何继承超类中定义的信号?
我试图将其他人精心制作的QTWidgets子类化,以改变一些默认行为:
//Plot3D is a QWidget that defines a signal "rotationChanged"
class matLinePlot : public QObject, public Plot3D {
Q_OBJECT;
//etc...
public:
//etc...
//Catch Plot3D's signal "rotationChanged" and do some magic with it:
void initPlot(){
QObject::connect(this, SIGNAL(rotationChanged( double , double , double )),
this, SLOT(myRotationChanged(double, double, double)));
}
};
问题出在QObject :: connect行中.我想做的是将rotationChanged SIGNAL(从qwt3D_plot.h)连接到本地函数/ SLOT - "myRotationChanged".但是每当我这样做时,在运行时我得到:
Object :: connect:没有这样的信号matLinePlot :: rotationChanged(double,double,double)
在C:...\matrixVisualization.h.当然,我知道这rotationChanged不是matrixVisualization.h- 它在qwt_plot3D.h,但我认为,因为我从Plot3D一切继承应该没事.但是,现在我考虑一下,因为SIGNAL和SLOT是宏,我认为MOC不知道/关心继承.
这使我对我的问题 - 因为MOC和信号/插槽似乎并不了解继承等:我怎么能继承定义窗口小部件在其他地方并访问widget的信号?
我有很多关于如何使用封装来完成这样的事情的例子,但是我害怕我不明白如何用继承来做这件事.
对不起,如果这是一个荒谬的问题 - …
我正在使用Qt和QWt3D绘图工具,并扩展它们以提供我需要的一些3D和2D绘图功能,所以我在这个过程中学习一些OpenGL.
我目前能够使用OpenGL绘制点,但仅作为圆形(或通过关闭抗锯齿来"正方形").这些点按照我喜欢的方式运行 - 即它们在我放大时不会改变大小,尽管它们的x/y/z位置在我缩放,平移等时适当移动.
我希望能够做的是使用无数形状(^,<,>,*,.等)绘制点.根据我对OpenGL的了解(这不是很多),因为OpenGL将所有内容视为"真正的"三维对象,因此放大任何openGL形状,但"点"会改变对象的投影尺寸.
在做了一些阅读之后,我认为这个问题有(至少)2个可能的解决方案:
使用OpenGL纹理.这似乎并不困难,但我相信随着我的放大,纹理图像会变得越来越大 - 这是正确的吗?
使用OpenGL多边形,线条等绘制*,三角形或其他.但是我又遇到了同样的问题 - 当我缩放时,如何防止OpenGL重新调整"点"的大小?
解决方案只是咬住子弹并在每次用户缩放或平移时重新绘制整个数据集以确保点保持相同的大小?有没有办法告诉openGL不重新计算对象的大小?
对不起,如果这是在某个地方的OpenGL文档 - 我找不到它.