使用 OpenCV 复制 Gimp 的 Color->Invert 操作
Replicate Gimp's Color->Invert Operation using OpenCV
我需要对图像进行预处理,以将其转换为高对比度的亮暗背景,非常适合提供给 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 关于 Color->Invert 到底做什么的文档是 bit cryptic,至少对我来说是这样。它提到 "hues are replaced by their complementary colors" 但不清楚如何复制它。
澄清一下,我不希望答案中包含有效的 Golang 代码。我只是在寻找一些关于我应该将哪些 OpenCV 函数串在一起的提示(以任何语言,我可以将其移植到 Go)以复制 Gimp 的 Color-Invert
操作。
我不熟悉 Go
,但看起来您的图像在打开时已转换为灰度。
检查您的 flags/parameters 加载位置,并且您至少有三个频道,而不是一个频道。
我需要对图像进行预处理,以将其转换为高对比度的亮暗背景,非常适合提供给 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 关于 Color->Invert 到底做什么的文档是 bit cryptic,至少对我来说是这样。它提到 "hues are replaced by their complementary colors" 但不清楚如何复制它。
澄清一下,我不希望答案中包含有效的 Golang 代码。我只是在寻找一些关于我应该将哪些 OpenCV 函数串在一起的提示(以任何语言,我可以将其移植到 Go)以复制 Gimp 的 Color-Invert
操作。
我不熟悉 Go
,但看起来您的图像在打开时已转换为灰度。
检查您的 flags/parameters 加载位置,并且您至少有三个频道,而不是一个频道。