1

イメージで scikit-image の適応しきい値を使用しようとしています。HEREからサンプルコードをテストしました

import matplotlib.pyplot as plt

from skimage import data
from skimage.filters import threshold_otsu, threshold_adaptive


image = data.page()

global_thresh = threshold_otsu(image)
binary_global = image > global_thresh

block_size = 35
binary_adaptive = threshold_adaptive(image, block_size, offset=10)

fig, axes = plt.subplots(nrows=3, figsize=(7, 8))
ax0, ax1, ax2 = axes
plt.gray()

ax0.imshow(image)
ax0.set_title('Image')

ax1.imshow(binary_global)
ax1.set_title('Global thresholding')

ax2.imshow(binary_adaptive)
ax2.set_title('Adaptive thresholding')

for ax in axes:
    ax.axis('off')

plt.show()

このコードは、サンプル画像を取り込み、しきい値を設定して、plt を使用して表示します。ただし、しきい値処理された画像のnumpy配列を取得しようとしています。cv2.imwrite変数で使ってみたところ、うまくいきbinary_globalません。印刷するbinary_globalと、実際には数値ではなく False と True の値で構成される配列になります。pltがそれをどのように使用して画像を生成できるかわかりません。とにかく、どのように画像をしきい値処理し、新しいしきい値処理された画像の配列を RGB 値で取得できますか?

4

1 に答える 1

1

を使用できるようにするには、最初に scikit イメージを opencv に変換する必要がありますcv2.imwrite()

次の変更を追加します-

from skimage import img_as_ubyte
import matplotlib.pyplot as plt
from skimage import data
from skimage.filters import threshold_otsu, threshold_adaptive
import cv2


image = data.page()

global_thresh = threshold_otsu(image)
binary_global = image > global_thresh

block_size = 35
binary_adaptive = threshold_adaptive(image, block_size, offset=10)

fig, axes = plt.subplots(nrows=3, figsize=(7, 8))
ax0, ax1, ax2 = axes
plt.gray()

ax0.imshow(image)
ax0.set_title('Image')

ax1.imshow(binary_global)
ax1.set_title('Global thresholding')

ax2.imshow(binary_adaptive)
ax2.set_title('Adaptive thresholding')

for ax in axes:
    ax.axis('off')

plt.show()
img = img_as_ubyte(binary_global)
cv2.imshow("image", img)
cv2.waitKey(0)

imgその後、書き込みなどに使用できます。

于 2017-12-06T06:02:24.460 に答える