首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell HIP :将过滤器应用于图像

Haskell HIP :将过滤器应用于图像
EN

Stack Overflow用户
提问于 2020-05-23 19:13:00
回答 1查看 170关注 0票数 1

我试图使用包髋部向图像添加一个过滤器,我能够使用ByteString包读取图像,并使用HIP将图像转换为Image VS YCbCr Word8类型。现在,如何将Image VS YCbCr Word8转换为Border (Pixel cs e)Pixel cs e?我还在学Haskell所以请简单一点。见下面的代码:

代码语言:javascript
复制
addFilterJpg :: FilePath -> IO ()
addFilterJpg fc = do
    case validPath fc of 
        Left err -> putStrLn err
        Right img -> do
            case readImage img of
                Left err -> putStrLn err
                Right img -> do
                  -- convert img::(Image VS YCbCr Word8) to Border (Pixel cs e)
                  -- apply filter
                  -- save image
                  putStrLn "Convolution Filter"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 20:29:32

你的问题有几个问题:

  • 首先,您缺少了validPath函数的声明。我假设它做了一些文件路径验证,所以我将在答案中忽略它。
  • readImage是一个IO操作,因此您不能仅仅在Either上匹配模式,您需要首先执行它。
  • 您还需要在某个地方输出结果图像,因此您也需要输出路径。

更多关于图像的评论:

  • 对YCbCr编码的图像应用卷积没有意义,所以要么需要转换为RGB,要么转换为灰度Y。我假设您想要颜色,所以我们使用RGB。
  • 您没有指定您想要的过滤器,所以只需使用高斯模糊
代码语言:javascript
复制
applyFilterJpg :: FilePath -> FilePath -> IO ()
applyFilterJpg fcin fcout = do
  eImg <- readImageExact JPG fcin
  case eImg of
    Left err -> putStrLn err
    Right img -> do
      let imgRGB :: Image VS RGB Double
          imgRGB = convert (img :: Image VS YCbCr Word8)
          gaussianBlurKernel :: Image VS X Double
          gaussianBlurKernel = fromLists $ [ [ 1/16, 1/8, 1/16 ]
                                           , [  1/8, 1/4,  1/8 ]
                                           , [ 1/16, 1/8, 1/16 ] ]
          convRGB = convolve Edge gaussianBlurKernel imgRGB
      writeImage fcout convRGB

这就是我们运行它时得到的结果:

尽管如此,已经有一些功能可以简化您的整个过程:

  • 使用已经为您完成转换的导入函数,这样您就不需要手工转换颜色空间了。
  • 而不是手动提供过滤器的内核,检查看看是否已经有一个在HIP上,你需要。
代码语言:javascript
复制
addFilterJpg' :: FilePath -> FilePath -> IO ()
addFilterJpg' fcin fcout = do
  imgRGB <- readImageRGB VS fcin
  let convRGB = applyFilter (gaussianBlur 1) imgRGB
  writeImage fcout convRGB

这是上述职能的结果:

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

https://stackoverflow.com/questions/61977364

复制
相关文章

相似问题

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