我正在尝试使用Haskell图像处理软件包HIP向图像添加过滤器,我能够使用ByteString软件包读取图像并将图像转换为类型{{1 }}使用HIP。现在,如何从Image VS YCbCr Word8
转换为Image VS YCbCr Word8
或Border (Pixel cs e)
?我仍在学习Haskell,所以请保持简单。参见下面的代码:
Pixel cs e
答案 0 :(得分:2)
您的问题有两个问题:
validPath
函数的声明。我假设它会进行一些文件路径验证,所以我将在答案中将其忽略。readImage
是一个IO
动作,因此,您不仅可以对Either
进行模式匹配,还需要首先执行它。更多有关图片的说明:
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
这是我们运行它时得到的:
话虽如此,已经内置了一些功能,可以为您简化整个过程:
addFilterJpg' :: FilePath -> FilePath -> IO ()
addFilterJpg' fcin fcout = do
imgRGB <- readImageRGB VS fcin
let convRGB = applyFilter (gaussianBlur 1) imgRGB
writeImage fcout convRGB
这是以上功能的结果: