0

余分な輪郭が取り込まれます:
ここに画像の説明を入力

次のコードを使用して、特定の画像の輪郭を作成しています

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 がそれを防ぐと思ったので、少し混乱します。

もう一つの例:
ここに画像の説明を入力

この輪郭はうまく見えます。しかし、画像はこのようになります ここに画像の説明を入力


画像の歪みが原因で予測が間違って いるかどうかはわかりません。ここに画像の説明を入力

4

1 に答える 1