Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在C++;_Python_C++_Opencv_Translate - Fatal编程技术网

Python 在C++;

Python 在C++;,python,c++,opencv,translate,Python,C++,Opencv,Translate,我试图把我的python代码翻译成C++(加速)。 我的代码通过套接字接收图像并显示它 Python代码: self._img = cv2.imdecode(np.fromstring(self._SocketData, np.uint8), 1) if not self._img is None: self._img = cv2.resize(self._img, (1280, 720))

我试图把我的python代码翻译成C++(加速)。 我的代码通过套接字接收图像并显示它

Python代码:

            self._img = cv2.imdecode(np.fromstring(self._SocketData, np.uint8), 1)
            if not self._img is None:
                self._img = cv2.resize(self._img, (1280, 720))
                cv2.imshow("1", self._img)
                cv2.waitKey(1)
遗憾的是,我在C++中遇到了“NP.FROM Stand”的问题。 如何实现这一点

我正在尝试:

while (ignored_error != boost::asio::error::eof) {

    boost::array<uchar, 10000> RECV_DATA;

    size_t ImageSize = image_recver.read_some(
        boost::asio::buffer(RECV_DATA), ignored_error);

    vector<uchar> Img (ImageSize);

    for (int i = 0; i < ImageSize; i++) {
        Img[i] = RECV_DATA[i];
    }

    Mat img(1280, 720, CV_64F, Img.data());

    imshow("1", img);
    waitKey(1);

}
while(忽略错误!=boost::asio::error::eof){
阵列接收数据;
size\u t ImageSize=image\u recver.read\u一些(
boost::asio::buffer(RECV_数据),忽略_错误);
向量Img(图像大小);
对于(int i=0;i
但这不起作用(我认为这是由于“cv2.imdecode”和“np.fromstring”造成的)

请帮帮我


一般来说,我的主要问题是np.fromstring,因为从socket我得到的是一个字符串,而不是一些字节或整数,我应该将一个字符串从(每个0-255)转换为像素数组。

谢谢大家的评论。我找到了解决办法:

    while (ignored_error != boost::asio::error::eof) {

        boost::array<uchar, 10000> RECV_DATA;

        size_t ImageSize = image_recver.read_some(
            boost::asio::buffer(RECV_DATA), ignored_error);

        vector<uchar> Img (ImageSize);

        for (int i = 0; i < ImageSize; i++) {
            Img[i] = RECV_DATA[i];
        }

        Mat img_img = imdecode(Img, 1);

        imshow("1", img_img);
        waitKey(1);

    }
while(忽略错误!=boost::asio::error::eof){
阵列接收数据;
size\u t ImageSize=image\u recver.read\u一些(
boost::asio::buffer(RECV_数据),忽略_错误);
向量Img(图像大小);
对于(int i=0;i

当然,仍然需要提出for循环。

10000字节的缓冲区可能不足以容纳整个图像。你不能解码图像数据。出于某种奇怪的原因,您创建的图像包含64位浮点值。@DanMašek,谢谢您的评论。我的图像大小是50x50,我想10000字节就是了enough@BotMan
CV_64F
代表双精度,请参见@BotMan why
1280720
然后如果50x50?@bruno,嗯。。在python中,使用相同大小的接收数组,所有这些都可以完美地工作。不管怎样,我找到了解决办法。