マイクロチューブの底にあるデータマトリックスバーコードを読み取ろうとしています。Pythonでデータマトリックスコードを見つけて読み取る方法
別の合併症はいくつかのケースでは、コードに到達した輝きがある:私はPythonバインディングを持っており、行列のドットが正方形であるが、彼らはここにラウンドしているときずっと悪いときも合理的に働くlibdmtxを試してみましたエリア。
バーコードは、フラットベッドスキャナーのラックでスキャンされ、一定のサイズでほぼ中央に配置されます。方向はランダムです。
私は結論に達しましたコードを見つけて自分でイメージを改善する必要があります。私はPythonとOpenCV 3.1を使用します。私はすでにしきい値、輪郭を試してみました:
import matplotlib.pyplot as plt
import numpy as np
import cv2
well = plt.imread('https://i.stack.imgur.com/kqHkw.png')
well = cv2.cvtColor(well, cv2.COLOR_BGRA2GRAY)
plt.subplot(151); plt.imshow(well)
x, thr = cv2.threshold(well, .4[enter image description here][2], 1, cv2.THRESH_BINARY)
thr = np.uint8(thr)
plt.subplot(152); plt.imshow(thr)
dst, contours, hierarchy = cv2.findContours(thr.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
c = cv2.drawContours(np.zeros_like(thr), contours, -1, 255, 1)
plt.subplot(153); plt.imshow(c)
areas = map(lambda x: cv2.contourArea(cv2.convexHull(x)), contours)
max_i = areas.index(max(areas))
d = cv2.drawContours(np.zeros_like(thr), contours, max_i, 255, 1)
plt.subplot(154); plt.imshow(d)
rect = cv2.minAreaRect(contours[max_i])
box = cv2.boxPoints(rect)
box = np.int0(box)
e = cv2.drawContours(np.zeros_like(thr),[box],0,255,1)
plt.subplot(155); plt.imshow(e)
plt.show()
それは[伝えどちらかのラウンドの要素をサポートしていない]ので、私も(https://stackoverflow.com/a/35017291/603323)zxingしようとしませんでした。 – Mische