我试图将我的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.fromstring”问题。

如何实现?

我正在尝试这个:
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);

}

但这是行不通的(我认为这是由于“cv2.imdecode”和“np.fromstring”造成的)。

请帮我

P.S通常,我的主要问题恰好在np.fromstring中,因为从套接字im获取的是字符串,而不是一些字节或整数,我应该将字符串转换为像素数组(每个像素为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);

    }

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

07-24 14:42