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;