2017-11-23 8 views
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() 

でも黒される:ここでは有望に見えた一つの方法でありますモード間の中間画像はない。

答えて

0

オリジナルのコードを残して、これらの行を変更してください。

res = img.copy() 
    while(100): 
     #cv2.imshow("edit", img) 
     cv2.imshow("edit", res) 
+0

ありがとうございました!私はとても長い間物事を試みていた。私はまだコードがどのように実行されているのかをよく理解していないと思うので、おそらく私は問題を解決することができませんでした。 –

関連する問題