我可以将 cv::Mat 作为 JPEG 数据写入命名管道吗?
Can I write a cv::Mat as JPEG data to a named pipe?
我需要将JPEG形式的图像数据写入Linux中的命名管道(使用mkfifo
创建)。
但是我找不到一种方法来解决这个问题。 我可以用imwrite
写入普通文件,但不能写入此 FIFO。
法典:
img = cv::Mat(cv::Size(videoWidth, videoHeight), CV_8UC3, videoBuffer);
cv::namedWindow("Display window", cv::WINDOW_NORMAL);
cv::imshow("Display window", img); // Show our image inside it.
cv::imwrite("image.jpg", img);
如何使用命名管道而不是文件?
我找到了解决方案。
//using namespace cv; // do not use opencv namespace, because of the write method
// open named pipe
if ((fifo = open(outPipe.c_str(), O_WRONLY)) < 0) {
printf("Fifo error: %sn", strerror(errno));
return 1;
}
cv::Mat img = cv::Mat(cv::Size(videoWidth, videoHeight), CV_8UC3, videoBuffer); // videoBuffer directly from libav transcode to memory
cv::namedWindow("Display window", cv::WINDOW_NORMAL); // Create a window for display.
cv::imshow("Display window", img); // Show our image inside it.
// encode image to jpeg
std::vector<uchar> buff; //buffer for coding
std::vector<int> param(2);
param[0] = cv::IMWRITE_JPEG_QUALITY;
param[1] = 95; //default(95) 0-100
cv::imencode(".jpg", img, buff, param);
printf("Image data size: %lu bytes (%d kB)n", buff.size(), (int) (buff.size() / 1024));
// write encoded image to pipe/fifo
if (write(fifo, buff.data(), buff.size()) < 0) {
printf("Error write image data to fifo!n");
}
close(fifo);
打开命名管道(等待读取器存在)
读取 opencv 垫中的数据
将 opencv mat 图像编码为 jpeg 格式
将编码数据写入管道
相关文章:
- 将结构数据类型传递给 C++ 中的命名管道
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- 无法使用管道将数据发送到我通过exec(C++)启动的第二个应用程序
- 如何以正确的格式沿第二个管道发送回数据?
- 管道未正确读取数据
- 用于在 c++ 程序之间发送数据的基本命名管道
- 如何正确使用管道将数据从子过程传输到父过程
- C 是否可以加密通过命名管道发送的数据
- 如何从 GStreamer 管道读取数据中的特定字段
- 如何从命名管道获取结构化数据并将其写入Qt中的qtableview
- 防止在管道中输入数据时退出
- MySQL Windows c api 命名管道错误:"在'等待初始通信数据包'时丢失与 MySQL 服务器的连接,系统错误:0
- 先进先出管道中的数据丢失?
- C++:在数据写入管道时从 stdin 读取
- 父进程没有完全从命名管道读取数据
- C++和Python之间的数据损坏管道
- 通过命名管道发送数据结构
- 在 Python 和 C++ 之间管道二进制数据
- 如何判断管道上是否有新数据
- QIODevice管道数据