반응형









opencv 3.0 부터는 cv 모듈이 제거 된거 같습니다.. 그래서 기존 코드는 동작안될듯 합니다..

대신 사용할 수 있는 코드를 찾았습니다..


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2
import urllib 
import numpy as np
 
stream=urllib.urlopen('http://plazacam.studentaffairs.duke.edu/mjpg/video.mjpg')
bytes=''
while True:
    bytes+=stream.read(1024)
    a = bytes.find('\xff\xd8')
    b = bytes.find('\xff\xd9')
    if a!=-1 and b!=-1:
        jpg = bytes[a:b+2]
        bytes= bytes[b+2:]
        i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), 0)
        cv2.imshow('i',i)
        if cv2.waitKey(1==27:
            exit(0)   
cs



출처 

http://stackoverflow.com/questions/21702477/how-to-parse-mjpeg-http-stream-from-ip-camera








아래는 기존 코드 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# -*- coding: utf-8 -*-
import wx
import cv2
 
import cv2.cv as cv
import urllib2
from cStringIO import StringIO
import PIL.Image as pil
url="http:⁄⁄192.168.0.8⁄snapshot.cgi?user=admin&pwd="
 
 
class ShowCapture(wx.Panel):
    def __init__(self, parent, fps=15):
        wx.Panel.__init__(self, parent)
 
        img_file = urllib2.urlopen(url)
        im = StringIO(img_file.read())
        source = pil.open(im).convert("RGB")
        self.bitmap = cv.CreateImageHeader(source.size, cv.IPL_DEPTH_8U, 3)
        cv.SetData(self.bitmap, source.tostring())
        cv.CvtColor(self.bitmap, self.bitmap, cv.CV_RGB2BGR)
 
        width = self.bitmap.width;
        height = self.bitmap.height;
        wxImage = wx.EmptyImage(width, height)
        cv_ImageBuf = cv.CreateImage ((width, height), cv.IPL_DEPTH_8U, 3)
        cv.CvtColor(self.bitmap, cv_ImageBuf, cv.CV_BGR2RGB);
        wxImage.SetData(cv_ImageBuf.tostring())
        self.bmp2 = wxImage.ConvertToBitmap()
 
 
        self.timer = wx.Timer(self)
        self.timer.Start(1000.⁄fps)
 
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.Bind(wx.EVT_TIMER, self.NextFrame)
 
       
 
 
    def OnPaint(self, evt):      
        dc = wx.BufferedPaintDC(self)
        dc.DrawBitmap(self.bmp2, 00)        
            
 
    def NextFrame(self, event):
        img_file = urllib2.urlopen(url)
        im = StringIO(img_file.read())
        source = pil.open(im).convert("RGB")
        self.bitmap = cv.CreateImageHeader(source.size, cv.IPL_DEPTH_8U, 3)
        cv.SetData(self.bitmap, source.tostring())
        cv.CvtColor(self.bitmap, self.bitmap, cv.CV_RGB2BGR)
 
        width = self.bitmap.width;
        height = self.bitmap.height;
        wxImage = wx.EmptyImage(width, height)
        cv_ImageBuf = cv.CreateImage ((width, height), cv.IPL_DEPTH_8U, 3)
        cv.CvtColor(self.bitmap, cv_ImageBuf, cv.CV_BGR2RGB);
        wxImage.SetData(cv_ImageBuf.tostring())
        self.bmp2 = wxImage.ConvertToBitmap()
        self.Refresh()
 
def main():   
    app = wx.App()
    frame = wx.Frame(None)
    cap = ShowCapture(frame)
    frame.Show()
    app.MainLoop()
    capture.release()
 
 
if __name__ == '__main__':
    main()
cs



참고

http://stackoverflow.com/questions/11253820/python-urllib2-and-opencv

http://mvlab.blogspot.kr/2007/05/day-record-2007-may-15.html



반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. kim 2016.05.28 14:49

    ubuntu 환경에서 wxpython 을 이요여하여 ip camera의 영상을 받아오려고 하는데요, 여쭤보고 싶어서 댓글답니다.
    저같은경우 창이 뜨기는하는데 하얀색 창만 뜨고 영상은 출력이 안되네요. 위의 소스에서 import cv2.cv as cv 여기서 에러가 나오구요 ( No module named cv ) 어떻게 해야할지 감이안잡힙니다. 도와주세요. 감사합니다.

  2. kim 2016.05.28 18:16

    openCV 버전 확인을 해보았는데 3.0.0 으로 확인 되었습니다. 계속해서 cv 모듈이 없다고 뜨네요.. 어떻게 해야할까요..

  3. kim 2016.05.28 19:23

    다시 깔고 시작을 해보았는데요 이제 오류는 해결된거 같습니다. 하지만 소스를 실행 시켜보면 창이 뜨지 않습니다. 무슨 문제일까요??

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2016.05.28 20:19 신고

      본문에 다른 소스코드를 찾아놓았습니다..
      동작하는 거 확인했으니 문제 없을듯합니다.

  4. kim 2016.05.28 23:44

    올려주신 내용 실행 정말 잘됩니다. 정말 감사합니다. 혹시 컬러로 바꾸어 wxpython으로 여러개의 카메라를 띄우고 싶은데 저 소스에서 어디부분이 데이터가 되는 건가요?? 바쁘신데 정말감사드립니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2016.05.29 00:59 신고

      cv2.imshow('i',i) 에서 화면에 출력하는 거니깐..
      i가 opencv에서 처리 가능한 데이터라고 보면되요..

+ Recent posts