gpt4 book ai didi

haskell HIP : Apply Filter to an Image

转载 作者:行者123 更新时间:2023-12-03 08:44:34 34 4
gpt4 key购买 nike

我正在尝试使用 Haskell 图像处理包 HIP 将滤镜添加到图像中,我能够使用 ByteString 读取图像使用 HIP 将图像打包并转换为 Image VS YCbCr Word8 类型。现在,如何从 Image VS YCbCr Word8 转换为 Border (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 的声明功能。我假设它会进行一些文件路径验证,所以我会在答案中忽略它。
  • readImageIO Action ,因此你不能只在 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

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

enter image description here

话虽这么说,已经有内置的函数可以为您简化整个过程:

  • 使用已为您完成转换的导入函数,这样您就无需手动进行色彩空间转换。
  • 不要手动为过滤器提供内核,而是检查 HIP 中是否已有您需要的内核。
addFilterJpg' :: FilePath -> FilePath -> IO ()
addFilterJpg' fcin fcout = do
imgRGB <- readImageRGB VS fcin
let convRGB = applyFilter (gaussianBlur 1) imgRGB
writeImage fcout convRGB

这是上述函数的结果:

enter image description here

关于 haskell HIP : Apply Filter to an Image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61977364/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com