Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

263
Vistas
Compresión de grupo 4 TIFF monocromo de salida OpenCV

¿Hay alguna forma de generar archivos TIFF monocromáticos en OpenCV con compresión de grupo 4?

Este es el comando para hacerlo con imagemagick/graphicsmagick

 'gm convert '.$file.' -type bilevel -monochrome -compress group4 '.$output

OpenCV versión 4.5.1

actualizar

 # g++ -Wall -O3 -std=c++17 main.cpp -o main `pkg-config opencv4 --cflags --libs` -ltiff

find no devuelve nada

 root@x:/usr/include/opencv4/opencv2# find . -name "*tif*"

código

 #include <tiffio.h> #include <opencv4/opencv2/opencv.hpp> std::vector<int> params = {cv::IMWRITE_TIFF_COMPRESSION, COMPRESSION_CCITTFAX4}; cv::imwrite(_output, src_bin, params);

error

[ WARN:0] global ../modules/imgcodecs/src/grfmt_tiff.cpp (914) writeLibTiff OpenCV TIFF (línea 914): TIFFSetField fallido (tif, TIFFTAG_PREDICTOR, predictor) imwrite_('out.tif'): no se puede escribir datos: OpenCV(4.5.1) ../modules/imgcodecs/src/grfmt_tiff.cpp:914: error: (-2:Error no especificado) OpenCV TIFF: falló TIFFSetField(tif, TIFFTAG_PREDICTOR, predictor) en la función 'writeLibTiff'

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

OpenCV usa libtiff ( enlace ). Si llama a cv.imwrite ( enlace ), puede pasar parámetros adicionales.

Para la compresión del grupo 4, los documentos dicen que debe pasar el indicador IMWRITE_TIFF_COMPRESSION ( enlace ) con el valor COMPRESSION_CCITTFAX4 ( enlace ).

Ejemplo:

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

Actualizar

Bueno, así es como debería funcionar. Pero parece que opencv4 actualmente tiene uno o más problemas al escribir TIFF del Grupo 4. Por cierto, es lo mismo cuando prueba python-lib. Este problema conocido se relaciona con una etiqueta predictora que opencv agrega incorrectamente. Apliqué la solución a mi compilación local, pero después de eso, surgió un problema más que faltaba una conversión de Mat de 8 bits a 1 bit/muestra para el grupo 4. Así que mi recomendación es:

Solución alterna

En su lugar, puede utilizar la API Magick++ de GraphicsMagick.

 #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); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda