LoginSignup
1
2

More than 3 years have passed since last update.

セルカウント健忘録

Last updated at Posted at 2020-06-01

ど素人は忘れ易いのでメモ書き

環境
windous10 home(64bit)
anacondanavigator
Jupiternotebook
python3(3.7.7)
opencv(3.4.2)

やりたい事としては粒(粒子)の数を数えるプログラムを作成したい。
ちなみに初学者。
周囲に教えてくれる人はいないので独学。
おかしい箇所は多々あります。

参考文献
https://cvtech.cc/count/
C++用なのでpythonに合わせるのに苦労しました。

使用画像としては上記参考文献に倣い種画像を使用。
seed.jpg

使用ライブラリ

cell_count.ipynb
import cv2
import sys
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

ぶっちゃけopencvとnumpyだけで事足りますが
自分の中でベーシックセットしてpandasとmatplotlibを足しているだけです。

cell_count.iypnb
img = cv2.imread('/seed.JPG',1)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

上段はカウントしたい画像
下段はグレースケール化したもの。
読込時点で('/seed.JPG',0)でもグレースケール化可能と思ったが
エラーが出たのであきらめてグレースケールを追加した。

cell_count.ipynb
size = (800,600)
img_resize = cv2.resize(img_gray,size) 

使用画像のサイズが大きいのでリサイズしています。
(単に画面に収まらなかったから…)
画像サイズがそこまで大きくなければ全くいらないと思います。

cell_count.ipynb
#画像の高さ、幅を取得
h, w = img_resize.shape

#画像の前処理(拡大)
mag = 1

#画像の前処理(ぼかし)
img_blur = cv2.GaussianBlur(img_resize,(5,5),0)

#2値画像を取得
threshold = 50
ret,img_th = cv2.threshold(img_resize, threshold, 255, cv2.THRESH_BINARY)

#モルフォロジー変換(膨張)
kernel = np.ones((2,2),np.uint8)
img_th2 = cv2.dilate(img_th,kernel,)

#境界検出と描写
__, cut, __ = cv2.findContours(img_th2.astype(np.uint8),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img_raw = cv2.resize(img,(w*mag, h*mag))
img_cut = cv2.drawContours(img_raw, cut, -1,(0,255,255),1)
print(len(cut))

参考の手順通りに行っていくと画像画像自体が大きくなりすぎて表示しきれなかったので
前処理部分はmag = 1にしている(画像自体をリサイズしているから。)

2値化に関してはthreshold = 50は処理画像を確認しながら自分で思う適切値にしている。

モルフォロジーと境界検出については正直半分も理解していないのが実情…orz
Udemyでの『opencvでの画像処理』講座を参考に何とか書き上げた感じ

print(len(cut))はカウントしたarrayを表示させたいので追記。
結果は【475】
ここの部分はtkinter等で表示させる様にしたいが
全くわからんです。

cell_count.ipynb
cv2.imshow("cell",img_cut)
cv2.waitKey(0)
cv2.destroyAllWindows()

結果を表示。

seed2.jpg

ここまで来るのに滅茶苦茶苦労したが、何とか望みの画像を得る事が出来ました。

白黒がはっきりとしている画像に対しては問題なく行けるが
粒(粒子)以外に色味があるものに関してはうまくいかなかったので
色成分を抜いての2値化等を試して、絶賛挫折している最中です…( ゚Д゚)

tkinterとの組み合わせもしたいが全く知識ないので
覚える事が多くて…(ノД`)・゜・。

以上です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2