c – 设置cv :: Mat的深度

我想测试一个寻找特定垫深度&&amp ;;的功能.频道数量

它有一个测试……

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,255));
printf("M: %d %d \n",M.channels(),M.depth());
cv::Mat M1(255,CV_32F,255));
cv::Mat M2(255,CV_32FC3,CV_8SC3,255));

我已经尝试了各种组合,但如果我打印,我得到0深度.

我也尝试加载一个png或一个jpg文件 – 结果相同(我不喜欢使用外部文件……但我看不出为什么这不起作用)

cv::Mat M3 = cv::imread( "c:/my_image.png",CV_LOAD_IMAGE_COLOR );
cv::Mat M3 = cv::imread( "c:/my_image.jpg",CV_LOAD_IMAGE_COLOR );

它们似乎都有深度= 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_8UCX矩阵上得到0,当你加载图像时,它通常被加载为CV_8UC3,所以你也会得到0.但我不知道你为什么在cv :: Mat M(255,CV_32FC3)上得到0,我在我的电脑上测试了它,它返回了5.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...