openCV

【OpenCV】閾値をランダムにランダムディザリング(python)

ランダムディザリング

前回の単純な2値では閾値を全画素に対して一定であったが、ランダムディザリングでは

各画素に対してランダムな閾値を設定して2値化します。

前回の復習

【OpenCV】画像を2値化(白黒)する。(python) 単純2値化 これはグレースケールの画像の各画素全体に任意の閾値を設定し、画素が設定した閾値より上か下かで各画素に0(黒)か255(...
元の画像
ランダムディザリング

閾値は固定するよりランダム生成にした方が規則性が無くなり画像が滑らかになります

基本的な使い方

乱数の生成

import random #標準ライブラリ
random.randint([start],[end])

引数の[start]に設定した値から[end]に設定した値まででランダムな整数を返します。

※ randomモジュールはpythonの標準モジュールなのでインストールの必要はありません。

サンプルコード

import cv2
import numpy as np
import random as rand

file_cat = 'img/cat.jpg'

color = cv2.imread(file_cat , 1) 
gray = cv2.imread(file_cat , 0) #グレースケール

height, width = gray.shape # 高さ・幅取得

for i in range(height):
    for j in range(width):
        if gray[i][j] < rand.randint(0,255):
            gray[i][j] = 0
        else:
            gray[i][j] = 255
            
while 1:
    cv2.imshow("gray", gray)
    
    k = cv2.waitKey(1)
    
    if k == ord('q'): # Qキーが押されたら終了
        break
        
cv2.destroyAllWindows()