I get the image information from Nao Robot's camera but the information is store in the string.My idea is to get the acsii of the characters and transform acsii into an instance of ndarray.But I failed. Is my idea wrong? Or did I make a mistake during the process of thransforming.The error is that source image must have 1, 3 or 4 channels in function cv.ConvertImage. Here is the code:
import sys
import cv2 as cv
from naoqi import ALProxy
import vision_definitions
from numpy import array
class OpenCVModule():
def __init__(self, IP, PORT, CameraID):
print CameraID
self._videoProxy = None
self._cameraID = CameraID
self._resolution = vision_definitions.kQVGA # 320 * 240
self._colorSpace = vision_definitions.kBGRColorSpace
self._fps = 20
self._imgClient = ""
self._imgData = None
cv.namedWindow("Camera_OpenCV", 0)
self._registerImageClient(IP, PORT)
def _registerImageClient(self, IP, PORT):
self._videoProxy = ALProxy("ALVideoDevice", IP, PORT)
self._imgClient = self._videoProxy.subscribeCamera("OpenC", 0, self._resolution, self._colorSpace,self._fps)
print self._imgClient
def _unregisterImageClient(self):
if self._imgClient != "":
self._videoProxy.unsubscribe(self._imgClient)
def showImage(self):
while True:
#try:
self._imgData = self._videoProxy.getImageRemote(self._imgClient)
one=[[[] for i in range(240)] for j in range(3)]
o=0
k=0
j=0
#self._img=array(self._imgData[6]).astype(int)
for i in range(len(self._imgData[6])):
one[o][k].append(ord(self._imgData[6][i]))
j+=1
if j==320:
j=0
k+=1
if k==240:
k=0
o+=1
self._img=array(one).astype(int)
cv.imshow("Camera_OpenCV2", self._img)
#except KeyboardInterrupt:
#break
#except:
#pass
if cv.waitKey(20) == 27:
break
cv.DestroyAllWindows()
self._unregisterImageClient()
if __name__ == '__main__':
IP = "192.168.1.105"
PORT = 9559
CameraID = 0
if len(sys.argv) > 1:
IP = sys.argv[1]
if len(sys.argv) > 2:
CameraID = int(sys.argv[2])
myWidget = OpenCVModule(IP, PORT, CameraID)
myWidget.showImage()