python
1from google.colab import drive 2drive.mount('/content/drive') 3 4import sys 5import numpy as np 6import matplotlib.pyplot as plt 7 8sys.path.append('/content/drive/My Drive') 9 10import ActivationFunction as AF 11 12from PIL import Image 13from IPython.display import display 14 15img = Image.open("drive/My Drive/mnist_dataset/box.jpg") 16img = img.resize((40, 40)) 17 18img = img.convert('L') 19img = img.point(lambda x: 1 if x > 128 else 0) 20img = np.asarray(img) 21 22img = np.asarray(img) 23 24np.set_printoptions(threshold=10000) 25 26imger = np.zeros((40,40)) 27 28# 両方の組み合わせ 29imger = np.zeros((40,40)) 30 31for i in range(39): 32 for j in range(36): 33 if (img[i][j] == 0 and img[i][j+1] == 0 and img[i][j+2] == 0 and img[i][j+3] == 1 and img[i][j+4] == 1 and img[i][j+5] == 1): 34 print('黒黒黒白白白の右端の黒の部分の行目(縦)、列目(横)の順。', i, j+2) 35 k=i 36 m=1 37 while (img[k+m][j] == 0 and img[k+m][j+1] == 0 and img[k+m][j+2] == 0 and img[k+m][j+3] == 1 and img[k+m][j+4] == 1 and img[k+m][j+5] == 1): 38 m = m+1 39 print('黒黒黒白白白の右端の黒の部分(スタート)、縦連続最大値、縦の連続数が同じ数字の個数、縦の連続個数の順。', j+2, i, m) 40# 両方の組み合わせ
こんな感じのコードを作りました、具体的には、画像を取り込んで、リサイズ、2値化し、白が連続したあと黒が連続する、または黒が連続したあと白が連続する部分の行列インデックスを二次元リストに格納し、
その二次元リストを、更に(元の画像で言うと)ある行の連続部分(白連続したあと黒連続、またはその逆)が、その次行の連続部分の近くにあれば、「物体として連続している」としてまた、行列インデックスを表示(実際は記録)していくというコードを組みたいのですが、
この最後の部分で止まってます、なんかかなり面倒くさそうなのですが、良い方法はないのでしょうか。
□□■■■□□□□
■■■□□□□□□
□□□■■■□□□
こうなっていたら、
■の色のついている部分は、隣り合う行で繋がっていると見なせるので、1つの物体と見なす、という事です。
すいませんエラーが発覚しました、直し次第再度うpします。
あなたの回答
tips
プレビュー