相关疑难解决方法(0)

OpenCV Mat元素类型及其大小

我对OpenCV Mat元素类型感到困惑.这是来自文档:

There is a limited fixed set of primitive data types the library can operate on.
That is, array elements should have one of the following types:

8-bit unsigned integer (uchar) 
8-bit signed integer (schar)
16-bit unsigned integer (ushort)
16-bit signed integer (short)
32-bit signed integer (int)
32-bit floating-point number (float)
64-bit floating-point number (double)
...

For these basic types, the following enumeration is applied:
enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };
Run Code Online (Sandbox Code Playgroud)

众所周知,C++标准没有以字节为单位定义基本类型的大小,那么他们如何使用这些假设呢?我应该期待什么类型,比方说CV_32S,是int32_t还是int?

opencv

34
推荐指数
2
解决办法
5万
查看次数

获取OpenCV图像类型的枚举名称(例如CV_32FC1)?

在OpenCV的C++界面中,检查图像类型似乎很容易.如果您有图像cv::Mat img = cv::imread("someImage.xyz"),那么您就是这样做的int theType = img.type().

但是,正如您所期望的那样,调用img.type()只给出一个整数,而不是枚举名称(例如CV_32FC1).

CV_32FC1如果我知道OpenCV枚举的整数值,是否有一种简单的方法可以打印出枚举名称(例如)?

c++ enums opencv image-processing image-formats

21
推荐指数
2
解决办法
3万
查看次数

如何从 cv::Mat 访问数据

我有一个cv::Mat以下尺寸480 x 640 x 32

你能告诉我如何访问这个结构中的数据吗?假设我想从 position 访问元素[2, 2, 2]。我怎样才能做到这一点?

编辑 1:

我曾尝试使用它,template<typename T> const T& Mat::at(int i, int j, int k) const但收到以下运行时错误:

在此处输入图片说明

编辑2:

这是我如何使用代码:

cv::Mat f(382,510,32); 
f=Utils::toMat(features); 
cout<<f.at<double>(1,1,1); 
Run Code Online (Sandbox Code Playgroud)

这里toMat是波纹管详述。

cv::Mat Utils::toMat( mxArray* p_)
{
mwSize ndims_= mxGetNumberOfDimensions(p_);
const mwSize* dims=mxGetDimensions(p_);
std::vector<int> d(dims, dims+ndims_);
int ndims = (d.size()>2) ? d.size()-1 : d.size();
int nchannels = (d.size()>2) ? *(d.end()-1) : 1;
int depth=CV_64F;
std::swap(d[0], d[1]);
cv::Mat mat(ndims, &d[0], CV_MAKETYPE(depth, nchannels));
// …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

opencv ×3

c++ ×2

enums ×1

image-formats ×1

image-processing ×1