【发布时间】:2018-01-30 14:14:05
【问题描述】:
我从 Nao Robot 的相机获取图像信息,但信息存储在字符串中。我的想法是获取字符的 acsii 并将 acsii 转换为 ndarray 的实例。但我失败了。我的想法错了吗?还是我在转换过程中弄错了。错误是函数cv.ConvertImage中源图像必须有1、3或4个通道。代码如下:
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()
【问题讨论】:
-
我想我在方法 showImage 中组织数据的方式是错误的。