2

我找不到从图像视图中提取像素或通道类型的正确方法。在 gray8_view_t 的情况下,我希望将下面的 pod_t 定义为“无符号字符”。没有简单的 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);
    }
4

2 回答 2

0

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

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;
};
于 2011-07-26T17:05:36.243 回答
0

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

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

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
}
于 2011-08-16T08:49:01.670 回答