【问题标题】:HVS color space in Open CVOpencv中的HSV色彩空间
【发布时间】:2013-01-02 23:54:00
【问题描述】:

当我使用 Open CV 编程打开我的 System CAM 时,我将检测到黄色对象,我从教程 Object Recognition in Open CV 获得了一些帮助,但我不清楚这行代码,它的作用是什么,我不知道。请详细说明我正在使用的以下代码行。

cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed);

程序的其他部分:

CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments));
    cvMoments(imgYellowThresh, moments, 1);

    // The actual moment values
    double moment10 = cvGetSpatialMoment(moments, 1, 0);
    double moment01 = cvGetSpatialMoment(moments, 0, 1);
    double area = cvGetCentralMoment(moments, 0, 0);

【问题讨论】:

    标签: c opencv color-space


    【解决方案1】:

    阅读documentation怎么样?

    inRange:

    检查数组元素是否位于其他两个数组的元素之间。

    实际上那篇文章包含明确的解释:

    并且两个 cvScalar 代表值的下限和上限 是黄色的。

    关于第二个代码。从该计算作者找到对象的中心及其正方形。引用文章:

    你首先将内存分配给时刻结构,然后你 计算各种时刻。然后使用矩结构, 您计算两个一阶矩(moment10 和 moment01)和 零阶矩(面积)。

    moment10 除以面积得到黄球的 X 坐标, 同样,moment01 除以面积得到 Y 坐标。

    【讨论】:

    • 你到底有什么不明白的?
    • 请向我解释一下这行代码,它们究竟是什么以及它们是如何做的,CvMoments moments = (CvMoments)malloc(sizeof(CvMoments)); cvMoments(imgYellowThresh, 时刻, 1);
    • 关于第一行:你知道c++中的mallocsizeofcast-operator是什么吗?如果不是,那么我不会在这里阅读有关 c++(或 c)的讲座——请自己阅读。关于第二行阅读official doc。如果您仍有问题,请提出。