是否有一种方法输出单色TIFF文件在OpenCV与组4压缩?
这是使用imagemagick/graphicsmagick执行此操作的命令。
'gm convert '.$file.' -type bilevel -monochrome -compress group4 '.$outputOpenCV版本4.5.1
更新
# g++ -Wall -O3 -std=c++17 main.cpp -o main `pkg-config opencv4 --cflags --libs` -ltifffind什么都不回
root@x:/usr/include/opencv4/opencv2# find . -name "*tif*"代码
#include <tiffio.h>
#include <opencv4/opencv2/opencv.hpp>
std::vector<int> params = {cv::IMWRITE_TIFF_COMPRESSION, COMPRESSION_CCITTFAX4};
cv::imwrite(_output, src_bin, params);错误
警告:0全局../模块/imgcodecs/src/grfmt_tiff.cpp (914) writeLibTiff OpenCV TIFF(第914行):TIFFSetField(tif,TIFFTAG_PREDICTOR,预测器) imwrite_('out.tif'):无法写入数据: OpenCV(4.5.1) ./模块/imgcodecs/src/grfmt_tiff.cpp:914:错误:(-2:未指定的错误) OpenCV TIFF: failed (tif,TIFFTAG_PREDICTOR,谓词)
发布于 2022-04-18 12:24:09
OpenCV使用libtiff (链接)。如果调用cv.imwrite (链接),则可以传递其他参数。
对于第4组压缩,文档表示必须传递IMWRITE_TIFF_COMPRESSION标志(链接)和值COMPRESSION_CCITTFAX4 (链接)。
示例:
#include <tiffio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
vector<int> params = {IMWRITE_TIFF_COMPRESSION, COMPRESSION_CCITTFAX4};
bool success = imwrite("image.tif", img, params);更新
好吧,它应该是这样运作的。但似乎opencv4目前在编写第4组TIFF时有一个或多个问题。顺便说一句,当您尝试python时,情况也是一样的。这个已知的问题处理一个由opencv错误添加的谓词标记。我将修复应用于本地构建,但在此之后,又出现了一个问题,即8位Mat转换为group4的1位/样例。所以我的建议是:
解决办法
相反,您可以使用GraphicsMagick API Magick++。
#include <opencv2/opencv.hpp>
#include <Magick++.h>
using namespace cv;
using namespace Magick;
int main(int argc, char* argv[]) {
InitializeMagick("");
Mat img = imread("img.png");
Image image(img.cols, img.rows, "BGR", CharPixel, (char *)img.data);
image.compressType(CompressionType::Group4Compression);
image.write("img.tif");
return(0);
}https://stackoverflow.com/questions/71911487
复制相似问题