如何从Boost::GIL视图类型中提取通道类型

How to extract channel type from Boost::GIL view type?

本文关键字:类型 提取 通道 视图 GIL Boost      更新时间:2023-10-16

我找不到从图像视图中提取像素或通道类型的正确方法。在gray8_view_t的情况下,我希望将下面的pod_t定义为"unsigned char"。没有简单的ViewType::pixel_t。函数PixelFoo中这种类型的正确定义是什么?

    template<class ViewType> 
    void PixelFoo(ViewType v)
    {
        typedef typename ViewType::x_iterator::value_type::channel_t pod_t;
        pod_t maxVal = channel_traits<pod_t>::max_value();
        pod_t podVal = v(0, 0); //expect error with emptyView
    }
    void PixelBar()
    {
        gray8_view_t emptyView;
        PixelFoo(emptyView);
    }

ViewType::value_type应该与您期望的ViewType::pixel_t相似。

然后,对于均匀像素类型,来自HomogeneousPixelBasedConcept的channel_type<T>::type应该导致您正在寻找的类型:

template<class ViewType> 
void PixelFoo(ViewType v)
{
    typedef typename boost::gil::channel_type<typename ViewType::value_type>::type pod_t;
    pod_t maxVal = channel_traits<pod_t>::max_value();
    pod_t podVal = v(0, 0); //expect error with emptyView
}

这是我目前的工作,但我确信有一个提供的方法来获得我需要的类型。

template<class DestView>
struct view_traits;
template<>
struct view_traits<gray8_view_t> {
    typedef bits8 channel_t;
};
template<>
struct view_traits<gray16_view_t> {
    typedef bits16 channel_t;
};
template<>
struct view_traits<gray64f_view_t> {
    typedef double channel_t;
};