1
画像PixelRGB8を取り込んで行列に変換しようとしましたが、行列上の畳み込みを行いました。最初の試行では、それを行列に変換し、行列を画像に戻したいと思っています。Haskell、画像を行列に変換する
私はこのエラーが表示されます。
• No instance for (Element Word8)
arising from a use of ‘matrixToImg’
• In the expression: matrixToImg $ imgToMatrix img
In an equation for ‘convImg’:
convImg img = matrixToImg $ imgToMatrix img
Failed, modules loaded: none.
それが何を意味するのでしょうか?
これはコードです。
import Codec.Picture
import Data.Matrix
import Data.Vector
import Data.Vector.Storable
import Debug.Trace
import GHC.Word
import Numeric.LinearAlgebra.Data
import Numeric.LinearAlgebra
convImg ::Image PixelRGB8 -> Image PixelRGB8
convImg img = matrixToImg $ imgToMatrix img
imgToMatrix ::Image PixelRGB8->Numeric.LinearAlgebra.Matrix Word8
imgToMatrix Image { imageWidth = w, imageHeight = h, imageData = vec } = ((3*w)><h) (Data.Vector.Storable.toList vec)
matrixToImg::Numeric.LinearAlgebra.Matrix Word8-> Image PixelRGB8
matrixToImg matrix = Image (rows matrix `quot` 3) (cols matrix) (vectorToStorableVector (Numeric.LinearAlgebra.Data.flatten(matrix)))
where vectorToStorableVector vec= Data.Vector.Storable.fromList $ Numeric.LinearAlgebra.Data.toList vec
ありがとうございます。
エラーを再現するコードを正確に記入してください。 – leftaroundabout
私はインポートを追加しました。このコードはエラーを再現します – Alon
'Element'インスタンスを持つタイプは' Float''Double''、 'Complex Float'、' Complex Double'です。つまり、Word8でこれを行うことはできません。たとえば私は代わりにFloatを入れました。これはきれいにコンパイルします。http://sprunge.us/WTIK – Michael