0
私の問題は、写真を編集するときに、トラックバーから最終設定を取得して保存してイメージを更新できないということです。opencv(python)のピクチャモルフォロジのトラックバー
私はここにしている私のコードをベースとgithubの上のコードが見つかりました:
https://github.com/opencv/opencv/blob/master/samples/python/morphology.py
これは、トラックバーのちょうど実装です。関数定義から外れると、モードと最終イメージの間に保存されません。まったく変更されません。だから私は他の方法を試みた。私はそれがやっているものを見ることができるようにトラックバーの設定を変更していながら絵を更新することができません。この道であり、最終的なイメージを持つ
def nothing(x):
pass
def isOrdered(img, cur_mode):
str_mode = 'ellipse'
cv2.namedWindow('edit')
cv2.createTrackbar('op/size', 'edit', 11, 20, nothing)
cv2.createTrackbar('iters', 'edit', 1, 10, nothing)
while(100):
cv2.imshow('edit', img)
k = cv2.waitKey(100) & 0xFF
if k == 27:
break
sz = cv2.getTrackbarPos('op/size', 'edit')
iters = cv2.getTrackbarPos('iters', 'edit')
opers = cur_mode.split('/')
if len(opers) > 1:
sz = sz - 10
op = opers[sz > 0]
sz = abs(sz)
else:
op = opers[0]
sz = sz*2+1
str_name = 'MORPH_' + str_mode.upper()
oper_name = 'MORPH_' + op.upper()
st = cv2.getStructuringElement(getattr(cv2, str_name), (sz, sz))
res = cv2.morphologyEx(img, getattr(cv2, oper_name), st, iterations=iters)
draw_str(res, (10, 20), 'mode: ' + cur_mode)
draw_str(res, (10, 40), 'operation: ' + oper_name)
draw_str(res, (10, 60), 'structure: ' + str_name)
draw_str(res, (10, 80), 'ksize: %d iters: %d' % (sz, iters))
cv2.destroyAllWindows()
return(sz, iters, op)
modes = ['erode/dilate', 'open/close', 'blackhat/tophat', 'gradient']
str_mode = 'ellipse'
for cur_mode in modes:
sz, iters, op = isOrdered(im, cur_mode)
str_name = 'MORPH_' + str_mode.upper()
oper_name = 'MORPH_' + op.upper()
st = cv2.getStructuringElement(getattr(cv2, str_name), (sz, sz))
im = cv2.morphologyEx(im, getattr(cv2, oper_name), st, iterations=iters)
cv2.imshow('final', im)
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
でも黒される:ここでは有望に見えた一つの方法でありますモード間の中間画像はない。
ありがとうございました!私はとても長い間物事を試みていた。私はまだコードがどのように実行されているのかをよく理解していないと思うので、おそらく私は問題を解決することができませんでした。 –