๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[Python][OpenCV] ์ด๋ฏธ์ง€ ์—ด๊ณ  ๋ช…์•”๋น„ ์กฐ์ ˆ ํ›„ ์ €์žฅํ•˜๊ธฐ - ํ‰๊ท  ๋ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ

by miiinn 2022. 10. 13.

๐Ÿ”Ž ๋ฌธ์ œ

sample.jpg ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ ์ด๋ฏธ์ง€์˜ ํ‰๊ท  ๋ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ๋ช…์•”๋น„๋ฅผ ์กฐ์ ˆํ•œ ๊ฒฐ๊ณผ๋ฅผ contrast.jpg๋กœ ์ €์žฅํ•˜์„ธ์š”.

* ๋ช…์•”๋น„ ์กฐ์ ˆ ์‹œ ์›๋ณธ์˜ pixel ๊ฐ’์— ์ผ์ •ํ•œ ๊ฐ’์„ ๊ณฑํ•˜๋Š” ํ˜•ํƒœ๋กœ ํ•˜๋˜, ๊ณ„์ˆ˜๋Š” 2.0์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
* ๊ฒฐ๊ณผ ์ €์žฅ ์‹œ saturation ์—ฐ์‚ฐ์„ ์ ์šฉํ•ด์ฃผ์„ธ์š”.

 

sample.jpg

 

import cv2 as cv

def contrast():
    img2 = cv.imread('sample.jpg', cv.IMREAD_GRAYSCALE) # ์ด๋ฏธ์ง€ ํŒŒ์ผ ์—ด๊ธฐ

    if img2 is None:
        print('Image load failed!')
        return

    alpha = 1.0 # ๊ธฐ์šธ๊ธฐ๊ฐ€ 2์ด๋ ค๋ฉด alpha๊ฐ’์€ 1.0์ด์–ด์•ผ ํ•œ๋‹ค.
    # convertScaleAbs๋ฅผ ์ด์šฉํ•ด ํ‰๊ท  ๋ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ์šธ๊ธฐ(๊ณ„์ˆ˜)๋Š” 2๋กœ ํ•˜์—ฌ ๋ช…์•”๋น„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค.
    img2 = cv.convertScaleAbs(img2, alpha = 1+alpha, beta = -img2.mean()*alpha)

    # saturate - ํฌํ™”์—ฐ์‚ฐ์„ ํ•˜์—ฌ 0๋ณด๋‹ค ์ž‘์œผ๋ฉด 0์— ์ˆ˜๋ ดํ•˜๊ฒŒ, 255๋ณด๋‹ค ํฌ๋ฉด 255์— ์ˆ˜๋ ดํ•˜๊ฒŒ, ๊ทธ ์™ธ์—” ์›๋ณธ๊ฐ’
    img2[img2 < 0] = 0
    img2[img2 > 255] = 255

    # contrast.jpg๋กœ ์ €์žฅ
    cv.imwrite('contrast.jpg', img2)

    cv.imshow('image', img2)
    cv.waitKey()

contrast()

 

contrast.jpg