#include #include #include #include #include #include #define FIFO_NAME "cvMat" // const std::vector imageFiles = {"bus.jpg", "cat_dog.jpg", "girl_faces.png"}; const std::vector imageFiles = {"bus.jpg"}; cv::Mat getFrame(const std::string source); std::string getRandomImage(std::vector images); int main(int argc, char const *argv[]) { if (!mkfifo(FIFO_NAME, 0666)) { std::perror("open"); return EXIT_FAILURE; } cv::Mat frame = getFrame(getRandomImage(imageFiles)); cv::Mat flat = frame.reshape(1, frame.total() * frame.channels()); std::vector buffer = frame.isContinuous() ? flat : flat.clone(); int fd = open(FIFO_NAME, O_WRONLY); write(fd, buffer.data(), buffer.size()); printf("Sended: %d\n", buffer.size()); close(fd); cv::Mat my_mat = cv::Mat(frame.rows, frame.cols, frame.type(), buffer.data()); cv::imwrite("sended.png", my_mat); return EXIT_SUCCESS; } cv::Mat getFrame(const std::string source) { cv::Mat image = cv::imread(source, cv::IMREAD_COLOR); if (image.empty()) { std::perror("failed to load image"); const cv::Mat emptyFrame(480, 640, CV_8UC3, cv::Scalar(44, 44, 44)); return emptyFrame; } else { return image; } } std::string getRandomImage(std::vector images) { std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, images.size() - 1); int randomIndex = dis(gen); std::string randomString = images[randomIndex]; return randomString; }