Репликация Gimp's Color-> Invert Operation с использованием OpenCV - PullRequest
0 голосов
/ 05 июля 2019

Мне нужно предварительно обработать изображение, чтобы преобразовать его в высококонтрастный темный светлый фон, который идеально подходит для инструментов 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

Вот результат применения Color->Invert через Gimp:

gimp result

Вот результат, который я получаю с помощью кода OpenCV, показанного выше:

opencv result

Как видно, между этими двумя результатами, похоже, есть некоторая разница.

Документация Gimp о том, что именно Color-> Invert делает, является битной загадкой , по крайней мере для меня. В нем упоминается, что «оттенки заменяются их дополнительными цветами», но неясно, как воспроизвести это.

Просто чтобы прояснить, я не ожидаю, что в ответах будет работать код Голанга. Я просто ищу некоторые подсказки относительно того, какие функции OpenCV я должен связать вместе (на любом языке, я могу перенести это в Go), чтобы повторить операцию Gimp Color-Invert.

1 Ответ

2 голосов
/ 06 июля 2019

Я незнаком с Go, но похоже, что ваше изображение было преобразовано в оттенки серого при открытии.

Проверьте ваши флаги / параметры, где вы загрузили его, и что у вас есть как минимум три, а не один отдельный канал.

...