使用 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 加载位置,并且您至少有三个频道,而不是一个频道。