我可以将矢量投入到OpenCV矩阵中吗?
Can I cast a vector into an OpenCv matrix?
我想使用openCVS矩阵函数直接在向量对象上操作。
我目前正在使用的是使用memcpy将数据复制到矩阵中,但是我真的很想直接在上面操作,因为我非常担心性能。以下是我当前的实现,可按预期进行。
工作实施
void TrajectorySmoother::SmoothTrajectoryOnce(
std::vector<navstack_msgs::location>& path,
const unsigned int& end_remove)
{
cv::Mat_<double> matrix_orig = cv::Mat(path.size(), sizeof(navstack_msgs::location)/sizeof(double), CV_64F);
memcpy(matrix_orig.data, path.data(), path.size()*sizeof(navstack_msgs::location));
ROS_INFO_STREAM("mat: " << matrix_orig);
}
我尝试使用static_cast
和reinterpret_cast
,但它们似乎不起作用,因此我尝试将数据指针作为openCV矩阵的指针施放。
指针铸造方法
void TrajectorySmoother::SmoothTrajectoryOnce(
std::vector<navstack_msgs::location>& path,
const unsigned int& end_remove)
{
cv::Mat_<double> matrix_orig = cv::Mat(path.size(), sizeof(navstack_msgs::location)/sizeof(double), CV_64F);
cv::Mat_<double> * matrix_ptr = reinterpret_cast<cv::Mat_<double> *>(path&);
ROS_INFO_STREAM("mat: " << (*matrix_ptr));
}
输出的是半分析流。我认为它可能需要重塑,但是我会发现它不是连续的。
您没有发布navstack_msgs::location
的定义,因此很难说您的要求是否有意义。
OpenCV为"借用"(即非拥有)内存提供了cv::Mat
构造函数(4)的构造函数:
Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)
Mat (Size size, int type, void *data, size_t step=AUTO_STEP)
Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0)
Mat (const std::vector< int > &sizes, int type, void *data, const size_t *steps=0)
http://docs.opencv.org/3.2.0/d3/d63/classcv_1_1mat.html#a51615ebf17a64c968df0bf0bf49bf49b49b49b4de6a3a
由于OpenCV矩阵是行 - 莫约尔,因此您可以这样使用它来创建Mat
"视图":
std::vector<T> path;
cv::Mat mat(path.size(), sizeof(T), CV_8U, path.data());
现在,每行都有path
中一个元素的数据。
,但是您必须在这里假设将T
解释为uchar
S的顺序是有意义的。如果您认为T
是一堆double
S(例如,POD:struct T { double x; double y; };
)。那你可以做
cv::Mat mat(path.size(), sizeof(T) / 8, CV_64F, path.data());
但是,如果T
有其他内容或具有指针(例如typedef std::vector<double> T
),那么您将无法通过cv::Mat
查看它。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我可以通过引用修改常量返回
- 我可以在 C++ 中的函数体之外进行操作吗?
- 我可以加快OpenCV的'raspicam_node'发布速度吗?
- 我可以用opencv提供的函数替换这个插值函数吗?
- 我可以将矢量投入到OpenCV矩阵中吗?
- 我可以将OpenCV的Release配置与我的应用程序的Debug配置一起使用吗
- 我可以将处理后的视频输出从 PC 上的 OpenCV 流式传输到安卓平板电脑吗?
- 我可以使用 opencv 函数(如 cv::multiply 和 std::vector<cv::Mat> 作为输入和输出参数吗?
- 我可以用C包装OpenCV的C++接口,然后用Lisp的CFFI包装吗?
- 我可以在 OpenCV 中增加 SVM 训练标签的数量吗?
- OpenCV:我在哪里可以找到CV_WINDOW_AUTOSIZE常量
- 我可以在OpenCV中使用重映射来获得点位置吗
- 我可以确定cv::Mat Opencv中的频道数量吗
- 我可以提供对OpenCV矩阵的只读访问吗?
- 我可以将数据分配给从OpenCV对象解引用中检索的双函数返回以任何方式