首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在OpenCV中,CV_8U和CV_8UC1有什么不同?

在OpenCV中,CV_8U和CV_8UC1有什么不同?
EN

Stack Overflow用户
提问于 2013-01-27 09:09:24
回答 2查看 79.6K关注 0票数 28

在OpenCV中,CV_8U和CV_8UC1有区别吗?它们是否都引用具有一个通道的8位无符号类型?如果是这样,为什么会有两个名字?如果不是,有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-29 00:15:01

你可以从this答案中看到,它们的计算结果是相同的类型。

至于为什么有两个名称,如果你看看#定义是如何构造的(同样,请参见链接答案),OpenCV中的类型有两个部分,深度和通道数量。该系统足够灵活,可以让您定义多达512个通道的新类型。当您指定1通道时,通道组件的类型被设置为0,这使得结果等同于简单地使用深度CV_8U。

票数 13
EN

Stack Overflow用户

发布于 2013-01-27 23:44:11

它们应该是相同的。对我来说,我更喜欢使用CV_8UC1,因为它让我的代码更清楚地知道我使用了多少个通道。

但是,如果要处理具有10个或更多通道的矩阵,则需要指定通道数。

您可能希望使用下面的代码片段来试验通道的数量。

#define CV_MAT_ELEM_CN( mat, elemtype, row, col ) \
    (*(elemtype*)((mat).data.ptr + (size_t)(mat).step*(row) + sizeof(elemtype)*(col)))

...

CvMat *M = cvCreateMat(4, 4, CV_32FC(10));
for(int ch = 0; ch < 10; ch++) {
  for(int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
      CV_MAT_ELEM_CN(*M, float, i, j * CV_MAT_CN(M->type) + ch) = 0.0;
      cout << CV_MAT_ELEM_CN(*M, float, i, j * CV_MAT_CN(M->type) + ch) << " ";        
    }
  }
  cout << endl << endl;
}
cvReleaseMat(&M);

图片来源:http://note.sonots.com/OpenCV/MatrixOperations.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14543420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档