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

席尔瓦

我正在尝试使用Haskell图像处理程序包HIP向图像添加过滤器,我能够使用ByteString程序包读取图像,Image VS YCbCr Word8使用HIP将图像转换为类型现在,我如何从转换Image VS YCbCr Word8Border (Pixel cs e)Pixel cs e我仍在学习Haskell,所以请保持简单。参见下面的代码:

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"
卵磷脂

您的问题有两个问题:

  • 首先,您缺少validPath功能声明我假设它会进行一些文件路径验证,因此我将在答案中将其忽略。
  • readImage是一个IO动作,因此您不能只对进行模式匹配Either,您需要先执行它。
  • 您还需要将结果图像输出到某处,因此也需要输出路径

有关图片的更多说明:

  • 将卷积应用于YCbCr编码的图像实际上没有任何意义,因此您需要转换为RGB或灰度Y。我假设您想要颜色,所以我们将使用RGB
  • 您没有指定所需的滤镜,因此仅使用高斯模糊
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中是否已经有您需要的内核。
addFilterJpg' :: FilePath -> FilePath -> IO ()
addFilterJpg' fcin fcout = do
  imgRGB <- readImageRGB VS fcin
  let convRGB = applyFilter (gaussianBlur 1) imgRGB
  writeImage fcout convRGB

这是以上功能的结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将过滤器应用于列表并显示数据

来自分类Dev

如何将过滤器应用于具有多个“ AND”条件的DataView

来自分类Dev

将过滤器应用于没有CSS的HTML5视频

来自分类Dev

J:关于将过滤器序列应用于列表的最佳方法

来自分类Dev

将过滤器应用于Scala Map时,如何查看已删除的条目?

来自分类Dev

将过滤器应用于巨大的csv文件中的标头

来自分类Dev

在春季启动中将过滤器应用于特定网址格式的注释

来自分类Dev

如何将过滤器号应用于输入值 AngularJS

来自分类Dev

Doctrine2是否将过滤器应用于删除语句

来自分类Dev

Haskell多重过滤器

来自分类Dev

RDLC报告:将过滤器应用于报告

来自分类Dev

如何在KonvaJS中将过滤器应用于具有图像填充的形状?

来自分类Dev

尝试将过滤器应用于充满对象的嵌套数组

来自分类Dev

将过滤器应用于kendo-ui下拉列表

来自分类Dev

使用queryset将过滤器应用于嵌套反向外键关系

来自分类Dev

根据条件将过滤器应用于数据框

来自分类Dev

查询数据框,但仅将过滤器应用于列值不是NaN的行

来自分类Dev

如何转换此数据框并将过滤器应用于单元格?

来自分类Dev

在prefetch_related()中将过滤器应用于Prefetch

来自分类Dev

如何将过滤器应用于具有多个“ AND”条件的DataView

来自分类Dev

将过滤器应用于没有CSS的HTML5视频

来自分类Dev

JPA如何将过滤器应用于EJB条件查询

来自分类Dev

将过滤器应用于过滤器参数

来自分类Dev

将过滤器应用于ListView的单个项目

来自分类Dev

将过滤器应用于Scala Map时,如何检查已删除的条目?

来自分类Dev

将过滤器应用于 CIImage [核心图像] 时获取 EXC_BAD_ACCESS

来自分类Dev

将过滤器应用于 UIScrollView GPUImage 中的当前图像索引

来自分类Dev

将过滤器应用于嵌套对象的 *ngFor

来自分类Dev

如何将过滤器应用于 {%...%}?

Related 相关文章

  1. 1

    将过滤器应用于列表并显示数据

  2. 2

    如何将过滤器应用于具有多个“ AND”条件的DataView

  3. 3

    将过滤器应用于没有CSS的HTML5视频

  4. 4

    J:关于将过滤器序列应用于列表的最佳方法

  5. 5

    将过滤器应用于Scala Map时,如何查看已删除的条目?

  6. 6

    将过滤器应用于巨大的csv文件中的标头

  7. 7

    在春季启动中将过滤器应用于特定网址格式的注释

  8. 8

    如何将过滤器号应用于输入值 AngularJS

  9. 9

    Doctrine2是否将过滤器应用于删除语句

  10. 10

    Haskell多重过滤器

  11. 11

    RDLC报告:将过滤器应用于报告

  12. 12

    如何在KonvaJS中将过滤器应用于具有图像填充的形状?

  13. 13

    尝试将过滤器应用于充满对象的嵌套数组

  14. 14

    将过滤器应用于kendo-ui下拉列表

  15. 15

    使用queryset将过滤器应用于嵌套反向外键关系

  16. 16

    根据条件将过滤器应用于数据框

  17. 17

    查询数据框,但仅将过滤器应用于列值不是NaN的行

  18. 18

    如何转换此数据框并将过滤器应用于单元格?

  19. 19

    在prefetch_related()中将过滤器应用于Prefetch

  20. 20

    如何将过滤器应用于具有多个“ AND”条件的DataView

  21. 21

    将过滤器应用于没有CSS的HTML5视频

  22. 22

    JPA如何将过滤器应用于EJB条件查询

  23. 23

    将过滤器应用于过滤器参数

  24. 24

    将过滤器应用于ListView的单个项目

  25. 25

    将过滤器应用于Scala Map时,如何检查已删除的条目?

  26. 26

    将过滤器应用于 CIImage [核心图像] 时获取 EXC_BAD_ACCESS

  27. 27

    将过滤器应用于 UIScrollView GPUImage 中的当前图像索引

  28. 28

    将过滤器应用于嵌套对象的 *ngFor

  29. 29

    如何将过滤器应用于 {%...%}?

热门标签

归档