在我的应用程序中,我想创建一个具有一些值的OpenCV Mat A(2-Dimensions),然后使用A作为输入将其传递给另一个OpenCV函数.
目前,我正在尝试:
// float data[2][5] = {{1,2,3,4,5},{7,8,9,10,11}};
// OR
float data[10] = {1,2,3,4,5,7,8,9,10,11};
// and then
// A = Mat(1, 5, CV_32FC1, &data, 2); // init from float 1D - array
// OR
A = Mat(2, 5, CV_32FC1, &data, 2);
Run Code Online (Sandbox Code Playgroud)
在1D数组的情况下,传递的值是OK.但这对2D阵列不起作用,这更常见.我怎样才能在OpenCV中解决这个问题?
我正在尝试创建一个GUI应用程序.
主窗口a QMainWindow包含9个固定大小的标签以及主窗口的大小.
我尝试在没有Qt GUI Designer的情况下以编程方式进行编程.该项目构建没有错误,但我看不到主窗口上显示的任何标签或布局.它只是空白.
这是我的源代码:
WCwindow::WCwindow()
{
// initialize widgets with text
CAM111 = new QLabel("CAM 01");
CAM121 = new QLabel("CAM 02");
CAM131 = new QLabel("CAM 03");
CAM211 = new QLabel("CAM 04");
CAM221 = new QLabel("CAM 05");
CAM231 = new QLabel("CAM 06");
CAM311 = new QLabel("CAM 07");
CAM321 = new QLabel("CAM 08");
CAM331 = new QLabel("CAM 09");
CAM111->setFixedSize(wcW,wcH);
CAM121->setFixedSize(wcW,wcH);
CAM131->setFixedSize(wcW,wcH);
CAM211->setFixedSize(wcW,wcH);
CAM221->setFixedSize(wcW,wcH);
CAM231->setFixedSize(wcW,wcH);
CAM311->setFixedSize(wcW,wcH);
CAM321->setFixedSize(wcW,wcH);
CAM331->setFixedSize(wcW,wcH);
QGridLayout *layout = new QGridLayout;
layout->addWidget(CAM111,0,0);
layout->addWidget(CAM121,0,1);
layout->addWidget(CAM131,0,2);
layout->addWidget(CAM211,1,0);
layout->addWidget(CAM221,1,1);
layout->addWidget(CAM231,1,2); …Run Code Online (Sandbox Code Playgroud) 根据这篇 文章和OpenCV文档,我可以初始化和访问多维Mat的每个元素.
实际上,我首先在MATLAB中编码,现在需要转换为OpenCV.MATLAB矩阵支持子矩阵访问,如:a(:,:,3)或b(:,:,3:5)
这可以在OpenCV中完成吗?据我所知,这可以用2D Mat完成.那个2D怎么样?
Edit01:此外,对于多维Mat,属性cols和行不足以表征矩阵的3种大小.有些尺寸大于3的情况.如何存储这些属性?
Edit02:
// create a 100x100x100 8-bit array
int sz[] = {100, 100, 100};
Mat bigCube(3, sz, CV_8U, Scalar::all(0));
Run Code Online (Sandbox Code Playgroud)
我放弃了使用OpenCV Mat进行子矩阵访问的想法.也许,它在OpenCV中不受支持.但是从这个示例代码中,构造函数从'sz'接收第三维.Mat第三维的哪个属性被传递给?可能在这种情况下,行= 100,cols = 100,另一个?? = 100我丢失了OPenCV文档
Edit03:从OpenCV源跟踪Mat类我从mat.hpp找到了Edit02中构造函数的定义:
inline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s)
: flags(0), dims(0), rows(0), cols(0), data(0), refcount(0),
datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows)
{
create(_dims, _sz, _type);
*this = _s;
}
Run Code Online (Sandbox Code Playgroud)
接下来的问题是定义"创建"功能的位置和方式?=>在OpenCV中跟踪这个Mat定义可能有助于我在Mat矩阵中修改/自定义我自己的特性
PS:不好意思,如果我的帖子太乱了!我是一个novic程序员,试图解决我的编程问题.如果我的方法不好或不够正确,Plz可以随意纠正我.谢谢!!
我正在制作运行多个网络摄像头/摄像头的应用程序.我无法通过OpenCV来检测我拥有的网络摄像头数量,以便在其中放置一个带有多个子网络摄像头的大显示窗口.
有人可以帮帮我吗?
我搜索过openCV willowgarage但是失败了
谢谢
我从OpenCV 2.3,distrans.cpp运行一个演示代码,有一行代码我几乎找不到它的含义:
Mat edge = gray >= edgeThresh, dist, labels, dist8u;
Run Code Online (Sandbox Code Playgroud)
它被用作阈值操作,但我不知道它是如何工作的,甚至不是命名和谷歌它.
谢谢
我正在测试OpenCV矩阵和显示功能,并有这个错误.我花了半天多的时间来揭示它:
我最初尝试显示OpenCV矩阵而不管基质的类型,例如CvMat或Mat,......使用由另一个帖子的Vasile先生推荐的显示方法多通道垫显示功能
显示方法简单地将矩阵的所有数据提取到cout流
这是我的计划:
// First: CV_32FC3 works OK
float objpts[12] = {0, 105, 105, 0, 0, 0, 105, 105, 0, 0, 0, 0};
CvMat objptsmat = cvMat( 1, 4, CV_32FC3, objpts);
CvMat* objectPoints = &objptsmat;
CvMatShow(objectPoints);
getchar();
Run Code Online (Sandbox Code Playgroud)
输出:

// Second: CV_64FC3 crashes
float objpts[12] = {0, 105, 105, 0, 0, 0, 105, 105, 0, 0, 0, 0};
CvMat objptsmat = cvMat( 1, 4, CV_64FC3, objpts);
CvMat* objectPoints = &objptsmat;
CvMatShow(objectPoints);
getchar();
Run Code Online (Sandbox Code Playgroud)
输出:

他们应该是一样的.对??!!
我想重温一下这个帖子。目前,我正在尝试避免在程序中混合角度的 Rad 和 Degree 类型而产生的错误。
例如:
typedef float Degree;
typedef float Radian;
Degree a = 15.;
Radian b = 3.14/4.;
float c = a + b; // no compile error
Run Code Online (Sandbox Code Playgroud)
有新的更新解决方案吗?
编辑01:
我求助于编写自己的类,希望它的尺寸小并且没有依赖性。这是工作代码
#include <stdio.h>
#include <iostream>
template<typename numT>
class RadAngle {
public:
RadAngle() {
AngVal = 0.0;
}
RadAngle(const numT& angV) {
AngVal = angV;
}
void operator = (const RadAngle<numT>& ang1) {
AngVal = ang1.getVal();
}
RadAngle operator+(const RadAngle<numT>& ang1) const { return RadAngle<numT>(AngVal+ang1.getVal()); }
RadAngle …Run Code Online (Sandbox Code Playgroud) 我已经有一段时间来回这个问题,特别是因为我开始使用OpenCV库.事实是,在OpenCV中,使用了几种方法:
当然,对应于每种方法,调用者格式和功能实现应该是不同的.
所有这些衍生物有什么意义?特别是最后一个(我还没有理解它的用法)
由于类recursive_directory_iterator(我不必编写递归代码),我正在使用new boost,v1.5.3来执行此任务,如下所示:
void ListDirRec(const char *Dir, vector<string>& DirFileList, const char* ext)
{
recursive_directory_iterator rdi(Dir);
recursive_directory_iterator end_rdi;
DirFileList.empty();
string ext_str0(ext);
for (; rdi != end_rdi; rdi++)
{
rdi++;
//cout << (*di).path().string() << endl;
cout << (*rdi).path().string() << endl;
//cout << " <----- " << (*rdi).path().extension() << endl;
//string ext_str1 = (*rdi).path().extension().string();
if (ext_str0.compare((*rdi).path().extension().string()) == 0)
{
DirFileList.push_back((*rdi).path().string());
}
}
Run Code Online (Sandbox Code Playgroud)
具有特定扩展名的功能列表文件.此函数适用于案例,但经常返回"断言失败错误",如:
**** Internal program error - .... assertion (m_imp.get()) ... operations.hpp(952): dereference of end recursive_directory_iterator
Run Code Online (Sandbox Code Playgroud)
我几乎找不到这个错误的原因.可以尝试..抓住帮助吗?提前感谢您的帮助
我正在尝试使用 Clipper 库来扩展我的避障机器人控制任务中的障碍物图像。但是现在,我什至坚持使用库的示例代码:
(http://www.angusj.com/delphi/clipper.php#code)
//from clipper.hpp ...
//typedef signed long long long64;
//struct IntPoint {long64 X; long64 Y;};
//typedef std::vector<IntPoint> Polygon;
//typedef std::vector<Polygon> Polygons;
...
using namespace ClipperLib;
Polygons subj(2), clip(1), solution;
subj[0].push_back(IntPoint(180,200));
subj[0].push_back(IntPoint(260,200));
subj[0].push_back(IntPoint(260,150));
subj[0].push_back(IntPoint(180,150));
subj[1].push_back(IntPoint(215,160));
subj[1].push_back(IntPoint(230,190));
subj[1].push_back(IntPoint(200,190));
clip[0].push_back(IntPoint(190,210));
clip[0].push_back(IntPoint(240,210));
clip[0].push_back(IntPoint(240,130));
clip[0].push_back(IntPoint(190,130));
DrawPolygons(subj, 0x160000FF, 0x600000FF); // <- identifier not found
DrawPolygons(clip, 0x20FFFF00, 0x30FF0000); // <- identifier not found
Clipper c;
c.AddPolygons(subject, ptSubject);
c.AddPolygons(clip, ptClip);
if (c.Execute(ctIntersection, solution)
DrawPolygons(solution, 0x3000FF00, 0xFF006600);
Run Code Online (Sandbox Code Playgroud)
我想知道我是否缺少任何库安装?我知道这是一个小问题,我有点菜鸟,但任何帮助都可以减轻我的很多工作。谢谢!