Реализация python np.fromstring () в C ++ - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь перевести мой код 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)

К сожалению, у меня проблема с "np.fromstring" в C ++.

Как это реализовать?

Я пытаюсь это:

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").

Пожалуйста, помогите мне

PS Вообще, моя главная проблема именно в np.fromstringпотому что из сокета я получаю строку, а не несколько байтов или целых чисел, и я должен преобразовать строку в массив пикселей из (0-255 каждый)

1 Ответ

1 голос
/ 06 марта 2019

Спасибо за все комментарии.Я нашел решение:

    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);

    }

PS Конечно, еще нужно придумать цикл for.

...