2017-05-10 22 views
2

私はkeras上でtheanoとopencvを使用して簡単なネットワークを実行しています。私はcvtColor()メソッドの実行中にセグメンテーションフォールトエラーが発生します。 コードスニペット:以下Python OpenCvセグメンテーションフォールト

if __name__ == '__main__': 
    cap = cv2.VideoCapture(0) 
    if not cap: 
     print "!!! Failed VideoCapture: unable to open device 0" 
     sys.exit(1) 
    cascade_path = "~/opencv-2.4.13.2/data/haarcascades/haarcascade_frontalface_default.xml" 
    model = Model() 
    model.load() 
    while True: 
     pdb.set_trace() 
     _, frame = cap.read() 


     frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 


     cascade = cv2.CascadeClassifier(cascade_path) 

デバッグ情報です:

Model Loaded. 
> 
-> _, frame = cap.read() 
(Pdb) n 
-> frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
(Pdb) list 
16   while True: 
17    pdb.set_trace() 
18    _, frame = cap.read() 
19  
20    
21 ->   frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
22  
23    
24    cascade = cv2.CascadeClassifier(cascade_path) 
25  
26    
(Pdb) n 
Segmentation fault 

それはcv2.cvtColor()が呼び出された瞬間をクラッシュします。フレーム変数が必要です(Pdb) frame.size 921600

cv2.imshow("color_image", frame)を使用しても、色付きフレームとその表示が正しく表示されました。しかし、私はそれをグレースケールに変換すると、クラッシュします!

私は現時点でOpenCV2.4を使用しています。昨日、同じコードがOpenCV3.2で正常に動作していました。何らかの理由で私はopencv libをダウングレードしなければなりませんでした。

この問題を解決するための提案はありますか?

ありがとうございました。

+1

このコードで、本質的には何も問題はありません。私の推測では、ダウングレードがあなたを殺したということです。私はOpenCV 3.0と同様のコードを実行し、それはちょうどいいです。多分、これが実現可能ではなかった2.4に関するドキュメントには何かがあります。 – AndyG

答えて

0

確かにopenCv3.2関連の問題でした。私はそれがopencv内のバグかライブラリの不一致かどうかは言いません。私はOpenCV3.0をインストールし、すべてが期待どおりに実行されています。 OpenCVの2.4では

0

*あなたが使用する必要があります。

cv2.cvtColor(frame, cv2.cv.CV_BGR2GRAY) 
関連する問題