Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设置cv::Mat的深度_C++_Opencv - Fatal编程技术网

C++ 设置cv::Mat的深度

C++ 设置cv::Mat的深度,c++,opencv,C++,Opencv,我想测试一个函数,该函数正在查找特定的铺层深度和通道数 它有一个测试 if (image.channels() == 1 && image.depth() == 8) ... else if (image.channels() == 1 && image.depth() == 16) ... else if (image.channels() == 1 && image.depth() == 32) ... else { if ((im

我想测试一个函数,该函数正在查找特定的铺层深度和通道数

它有一个测试

if (image.channels() == 1 && image.depth() == 8) ...
else if (image.channels() == 1 && image.depth() == 16)  ...
else if (image.channels() == 1 && image.depth() == 32)  ...
else
{  
  if ((image.channels() != 3) || (image.depth() != 8)) 
  {printf("Expecting rgb24 input image"); return false;}
  ...
}
为了避免使用本地资源,我更喜欢使用组合垫进行测试:

cv::Mat M(255, 255, CV_8UC3, cv::Scalar(0,0,255));
printf("M: %d %d \n", M.channels(), M.depth());
cv::Mat M1(255, 255, CV_32F, cv::Scalar(0,0,255));
cv::Mat M2(255, 255, CV_32FC3, cv::Scalar(0,0,255));
cv::Mat M2(255, 255, CV_8SC3, cv::Scalar(0,0,255));
我尝试过各种组合,但如果我打印,深度为0

我也尝试过加载一个png或jpg文件-结果是一样的(我不喜欢使用外部文件…但我看不出这不起作用的原因)

它们似乎都有深度=0

我还有别的事要做吗?我在文档中看不到任何内容。

在Mat上调用depth()时,它返回的深度值定义如下,而不是位数:

#define CV_8U   0
#define CV_8S   1
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6
您可以使用cv::DataDepth::value来确定哪个是哪个。比如说,

cv::DataDepth<unsigned char>::value == CV_8U;
cv::DataDepth<float>::value == CV_32F;
cv::DataDepth::value==cv_8U;
cv::DataDepth::value==cv_32F;

所以你应该在所有的CV_8UCX矩阵上得到0,当你加载一个图像时,它通常作为CV_8UC3加载,所以你也会得到0。但我不知道为什么在cv::Mat M(255,255,cv_32FC3)上得到0,我在我的计算机上测试了它,它返回了5

所以。。。函数中的测试错误,然后。。。我把它从C版本中改变了,如果它是(图像-nNave==1 & &图像>深度=8),那么,C++接口是不同的,这里是关于DethTh()的最新文档:
cv::DataDepth<unsigned char>::value == CV_8U;
cv::DataDepth<float>::value == CV_32F;