Мне нужно предварительно обработать изображение, чтобы преобразовать его в высококонтрастный темный светлый фон, который идеально подходит для инструментов OCR.
Предварительная обработка, которую для начинающих я выполнил в Gimp, просто включает выполнение операции Color->Invert
, которая дает мне результат, который очень хорошо работает при подаче в инструменты OCR.
Однако этот вопрос заключается в том, как повторить ту же операцию через OpenCV.
Ниже приведен код OpenCV (через оболочку Go для OpenCV), которым я до сих пор управлял:
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.
В качестве примера вот оригинальное изображение:
![original](https://i.stack.imgur.com/KJy4X.png)
Вот результат применения Color->Invert
через Gimp:
![gimp result](https://i.stack.imgur.com/qWSEg.png)
Вот результат, который я получаю с помощью кода OpenCV, показанного выше:
![opencv result](https://i.stack.imgur.com/ZeSQ5.png)
Как видно, между этими двумя результатами, похоже, есть некоторая разница.
Документация Gimp о том, что именно Color-> Invert делает, является битной загадкой , по крайней мере для меня. В нем упоминается, что «оттенки заменяются их дополнительными цветами», но неясно, как воспроизвести это.
Просто чтобы прояснить, я не ожидаю, что в ответах будет работать код Голанга. Я просто ищу некоторые подсказки относительно того, какие функции OpenCV я должен связать вместе (на любом языке, я могу перенести это в Go), чтобы повторить операцию Gimp Color-Invert
.