7Morph_Close.py

000: import cv2
001: import numpy as np
002: import random
003:
004: def __main():
005: size = np.array([720, 1280, 3])
006: whiteColor = np.array([255., 255., 255.])
007: wImg = np.full(size, whiteColor, dtype=np.uint8)
008:
009: blackColor = np.array([0., 0., 0.])
010: bImg = np.full(size, blackColor, dtype=np.uint8)
011:
012: wImg = setCrossLines(wImg, blackColor)
013: wOrg = wImg
014:
015: # ここで処理を実行する
016: # 白ベース画像の処理
017: wDst = getMorpholigy(wImg)
018: # 黒ベース画像の処理
019: bImg = setCrossLines(bImg, whiteColor)
020: bOrg = bImg
021: bDst = getMorpholigy(bImg)
022:
023: cv2.imshow(‘White Original’, wOrg)
024: cv2.imshow(‘Black Original’, bOrg)
025: cv2.imshow(‘White result’, wDst)
026: cv2.imshow(‘Black result’, bDst)
027: cv2.waitKey(0)
028:
029: cv2.destroyAllWindows()
030:
031: # クロージング処理
032: def getMorpholigy(img):
033: kernel = np.ones((5, 5), np.uint8) # 全要素を1で初期化
034: dst = cv2.morphologyEx(src=img, op=cv2.MORPH_CLOSE, kernel=kernel, iterations=3)
035:
036: return dst
037:
038: # ノイズの描画
039: def __setNoise(img, color):
040: for num in range(400):
041: x = int(random.uniform(10, 1270))
042: y = int(random.uniform(10, 710))
043: angle = (x, y, 3, 3)
044: cv2.rectangle(img, angle, color, -1)
045:
046: return img
047:
048: # クロスラインの描画
049: def setCrossLines(img, color):
050: padding = 100
051: border = 20
052: height, width, channels = img.shape[:3]
053: # 水平直線の描画
054: img = cv2.line(img, (padding, int(height / 2)), (width – padding, int(height / 2)), color, border, cv2.LINE_AA)
055: # 垂直直線の描画
056: img = cv2.line(img, (int(width / 2), padding), (int(width / 2), height – padding), color, border, cv2.LINE_AA)
057: # 斜線の描画
058: img = cv2.line(img, (padding, padding), (width – padding, height – padding), color, border, cv2.LINE_AA)
059:
060: __setNoise(img, color)
061:
062: return img
063:
064: if __name__ == “__main__”:
065: print(cv2.__version__)
066:
067: __main()