有效地转换来自opencv的数据
Convert data from opencv effectively
我正在编写一个同时使用OpenCV和Kinect v2 SDK的程序,在那里我遇到了一个尴尬的问题。我获得了 Point2i(类由 int X,Y 组成)的向量作为像素的索引,我需要将其转换为 depthSpacePoint(由 float32 X,Y 组成的结构),它只是 depthSpacePoints.X = Point2i.X;或者相反。
元素太多了,写一个 for 循环会太慢。
所以我想知道是否有任何像memcpy或其他方法可以更快地完成它?
以下是我的代码摘要:
cv::findnonZeros(Mat A, vector<cv::Point2i> B);
vector<depthSpacePoint> C(B.size());
for(int i= 0; i < B.size(); ++i){
C[i].X = b[i].x;
C[i].Y = B[i].y;
}
icoordinateMapper(C.size(),C,...,...);
<-这就是我转换它的原因,因为这个库函数只采用自己的数据类型depthSpacePoint;>
您可以实现自己的直接创建std::vector<depthSpacePoint>
的cv::findNonZero
版本。
这只是扫描(有效)矩阵并检查条件的问题。
void findNonZeroSpacePoints( InputArray _src, std::vector<depthSpacePoint>& pts )
{
// Get the src matrix, be sure it's of correct type
Mat src = _src.getMat();
CV_Assert( src.type() == CV_8UC1 );
// If src is all zero, return
int n = countNonZero(src);
if(n == 0) {
pts.clear();
return;
}
// Allocate pts
pts.resize(n);
// Efficiently scan matrix and append points
depthSpacePoint* ppts = pts.data();
for( int i = 0; i < src.rows; i++ )
{
const uchar* bin_ptr = src.ptr(i);
for( int j = 0; j < src.cols; j++ )
if( bin_ptr[j] )
*ppts ++ = depthSpacePoint(float(j), float(i));
}
}
相关文章:
- OpenCV 和从 OutputArrays 或 (Mat) 读取数据
- OpenCV(C++)处理来自JavaScript / Web Assembly的图像数据
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- OpenCV C++ 3 维垫数据访问错误值
- 将数据从 OpenCV C++传递到 NodeJS/JS |电子
- 如何将OpenCV图像数据从Python转换为C++?
- 如何将训练数据从UCI加载到OpenCV?
- 对来自csv文件的数据执行OpenCV k-means
- 这是我的程序,C++使用 OpenCv 库从数据集中读取图像序列,但它没有运行
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- 如何将OpenCV垫子转换为JPEG CHAR数据
- 将JPEG CHAR数据转换为OpenCV垫子
- 将 OpenCV 矩阵分配给数据结构
- opencv::Mat,从原始数据中获取像素值
- 使用 2D 数据创建 3D 直方图(OpenCV?
- OpenCV: cv::Mat 无法从看似有效的数据中创建矩阵
- 使用 OpenCV 和 Android NDK 转换数据格式
- OPENCV中的GSTREAMER不会通过UDP发送视频数据
- 使用原始数据OpenCV设置已分配的Mat
- 如何将Mat数据(OpenCV,图像的数据格式)转换为unity3d texutre