LoginSignup
4
2

More than 5 years have passed since last update.

RasPi:OpenCVで遊んでみた♬

Posted at

今回は、RasPiにOpenCVをインストールして遊んでみた話です。

インストールは、Ubuntu on Windowsでは、最後最後

QXcbConnection: Could not connect to display :0
Aborted (core dumped)

が出て、どうにも後味悪い状況でした。

しかし、その他の環境では一応使えているので、RasPiも動くといいなぁ~
手順は、ほとんど変わりません。
前回、ほぼ出来たので以下のサイトのまんま入れます。
【参考】
1.Ubuntu OpenCVをインストールする手順
2.前回の記事OpenCVで遊んでみた♬

ここで問題になりそうなのが、
-D WITH_FFMPEG=ON \
ですが、今回はあくまで最小構成(つまり参考1)で、動かしてから考えることにします。

ということで、RasPiでは特に問題なしで最後まで表示できました。
そして、FFMPEGのインストール。。。
いろいろ参照して試みましたが、失敗しています。

ということで、出力した動画ファイルGRAY_FILE_NAME='douga_camera_5s.avi'
の表示ができませんでした。
これは、Windowsにファイルを移動して確認できました。
また、以下のコードでWindowsのときは問題なく、mp4出力もできましたが、これもエラーはいています。なんでだろ??
前記事の以下の部分ができません

【追記】cv_fourcc('M', 'P', '4', 'V')、
     ファイル名:OUT_FILE_NAME = "real_SSD_result.mp4"で動きました。
   ファイルサイズちょっと減少:9,420(avi)⇒9,387KB(mp4)

エラー

[mp4 @ 0x184e660] Tag MP4V/0x5634504d incompatible with output codec id '13'

.mp4がcodec idと不整合だと。。。なんだろ??
ちょっと調べたくらいでは解決しないので、気長に待つこととしよう。。

まあ、.aviで保存できているし、動画も見られるので一応目標としては達成している。

実行中のRasPi画面

こんな感じです。。。
gdIbc1Mx.jpg
52EuIvE5.jpg

ここまできたら、物体検出まで行きたい。。。
さっきのMJPG-Streamerみたいに配信や監視がしたい。。。

コードは以下の通り

python2.7のidleで動かしています。
コード的には、以前のものと全く同じです。

read_save_doga.py
import numpy as np
import cv2

# cv2.cv.CV_FOURCC
def cv_fourcc(c1, c2, c3, c4):
    return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
        ((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)

cap = cv2.VideoCapture(0) #'dougasozai_car.mp4')
GRAY_FILE_NAME='douga_camera_5s.avi'
FRAME_RATE=30
ret, frame = cap.read()

# Define the codec and create VideoWriter object
height, width, channels = frame.shape
out = cv2.VideoWriter(GRAY_FILE_NAME, \
                      cv_fourcc('X', 'V', 'I', 'D'), \
                      FRAME_RATE, \
                      (width, height), \
                      True)  #isColor=True for color
"""
out = cv2.VideoWriter(GRAY_FILE_NAME, \
                      cv_fourcc('X', 'V', 'I', 'D'), \
                      FRAME_RATE, \
                      (width, height), \
                      False)  ##isColor=False for gray
"""
# ウィンドウの準備(無くても余り変わらない)
cv2.namedWindow('frame')
cv2.namedWindow('gray')
cv2.namedWindow('hsv')
cv2.namedWindow('mask')
cv2.namedWindow('res')
cv2.namedWindow('gaussian')

while ret == True:
    #ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    hsv =cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    hsv =cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # ガウシアン平滑化
    # (5, 5)はx、y方向の標準偏差で変えるとボケ度が変わる、最後の引数はint,ボーダータイプらしいが数字の意味不明    
    g_frame = cv2.GaussianBlur(frame, (15, 15), 0)
    gg_frame = cv2.cvtColor(g_frame, cv2.COLOR_BGR2GRAY)

    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # Bitwise-AND: mask and original image
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame)
    cv2.imshow('gray',gray)
    cv2.imshow('hsv',hsv)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    cv2.imshow('gaussian',g_frame)


    #書込みgrayならグレー画像、frameなら拡張子変更
    #カラーなら、out = cv2.VideoWriter()でisColor=True、グレーならFalse
    #out.write(gray)  #OK by cv2.VideoWriter_fourcc(*'XVID') #NG by cv_fourcc('X', 'V', 'I', 'D')
    #out.write(res)    #OK by cv_fourcc('X', 'V', 'I', 'D')
    #out.write(mask)  #OK by cv2.VideoWriter_fourcc(*'XVID') #NG by cv_fourcc('X', 'V', 'I', 'D')
    #out.write(hsv)    #OK by cv_fourcc('X', 'V', 'I', 'D')
    #out.write(frame)    #OK by cv_fourcc('X', 'V', 'I', 'D')
    out.write(g_frame)  #OK by cv_fourcc('X', 'V', 'I', 'D')
    #out.write(gg_frame)  #OK by cv2.VideoWriter_fourcc(*'XVID') #NG by cv_fourcc('X', 'V', 'I', 'D')

    #なんかKey押せば止まる
    if cv2.waitKey(1000*5) >= 0:  
        break

    ret, frame = cap.read()

cap.release()
out.release()
cv2.destroyAllWindows()
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2