我需要对图像进行预处理,以将其转换为高对比度的暗光背景,这是提供给OCR工具的理想选择。
对于初学者来说,我在Gimp中做的预处理只涉及运行它的Color->Invert操作,当输入到OCR工具中时,它会给我一个非常好的结果。
然而,这个问题是如何通过OpenCV复制相同的操作。
以下是我目前为止管理的OpenCV代码(通过OpenCV的Go包装器):
func preprocessImage(inputImage gocv.Mat) {
white := gocv.NewMatWithSizeFromScalar(
gocv.Scalar{255.0, 255.0, 255.0, 255.0},
inputImage.Rows(), inputImage.Cols(),
inputImage.Type()
)
targetMat := gocv.NewMat()
gocv.Subtract(white, inputImage, &targetMat)
pngCompressionOptions := []int{gocv.IMWritePngCompression, 0}
gocv.IMWrite("result.png", targetMat, pngCompressionOptions)
}然而,这似乎与我从Gimp获得的结果不匹配。
作为示例,以下是原始图像:

下面是通过Gimp应用Color->Invert的结果:

下面是我通过上面所示的OpenCV代码获得的结果:

很明显,这两个结果似乎有很大的不同。
Gimp关于颜色->Invert到底做了什么的文档是一个bit cryptic,至少对我来说是这样。它提到“色调被它们的互补色取代”,但我不清楚如何复制这一点。
为了清楚起见,我并不期望答案中包含有效的Golang代码。为了复制Gimp的Color-Invert操作,我只是在寻找一些关于我应该将哪些OpenCV函数串在一起(在任何语言中,我都可以移植到Go中)的提示。
发布于 2019-07-06 23:51:47
我不熟悉Go,但看起来你的图像在打开时就转换成了灰度。
检查您加载标志/参数的位置,是否至少有三个通道,而不是一个通道。
https://stackoverflow.com/questions/56906254
复制相似问题