次のコードを使用して、特定の画像の輪郭を作成しています
image = cv.imread('/content/drive/My Drive/Colab Notebooks/digit-recognition/test-2.jfif')
grey = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
grey = cv.GaussianBlur(grey,(5,5),0)
thresh = cv.adaptiveThreshold(grey,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY_INV,11,2)
contours, hierarchy = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
preprocessed_digits = []
for c in contours:
x,y,w,h = cv.boundingRect(c)
cv.rectangle(image, (x,y), (x+w, y+h), color=(0, 255, 0), thickness=2)
digit = thresh[y:y+h, x:x+w]
resized_digit = cv.resize(digit, (18,18))
padded_digit = np.pad(resized_digit, ((5,5),(5,5)), "constant", constant_values=0)
plt.imshow(padded_digit, cmap="gray")
plt.show()
xdigit = padded_digit.reshape(1,784)
prediction = neigh.predict(xdigit)
print("prediction = ",prediction[0])
print("\n\n\n----------------Contoured Image--------------------")
plt.imshow(image, cmap="gray")
plt.show()
不要な輪郭をスキップするにはどうすればよいですか?
Adaptive Thresholding を使用しないと、この画像の光の影響により、輪郭がまったく正しく検出されません。このコンタリングは
文字を適切に検出するので良いのですが、唯一のことはノイズ領域も検出することです。
実験:
適応しきい値処理の blockSize を 3 に変更すると、輪郭処理が完璧に見えました。
今、私は同じで別の画像を与えました。それは次の輪郭を生成しました
輪郭の中に輪郭を作っているようなものです。
RETR_EXTERNAL がそれを防ぐと思ったので、少し混乱します。