libtiff 保存tif opencv打开旋转
时间: 2023-11-17 15:34:03 浏览: 153
要使用libtiff保存tif格式的图像,可以使用以下代码:
```c++
#include "tiffio.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void save_tiff(const string& filename, const Mat& image) {
TIFF* tif = TIFFOpen(filename.c_str(), "w");
if (tif) {
int width = image.cols;
int height = image.rows;
int channels = image.channels();
TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, channels);
TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
for (int y = 0; y < height; y++) {
TIFFWriteScanline(tif, (unsigned char*)image.ptr(y), y);
}
TIFFClose(tif);
}
}
int main() {
Mat image = imread("test.jpg");
if (image.empty()) {
cout << "Failed to read image!" << endl;
return -1;
}
// 旋转图像
Mat rotated = rotate(image, 45);
// 保存为tif格式
save_tiff("test.tif", rotated);
// 读取并显示tif格式图像
Mat image_tif = imread("test.tif", IMREAD_ANYDEPTH | IMREAD_ANYCOLOR);
if (image_tif.empty()) {
cout << "Failed to read tiff image!" << endl;
return -1;
}
imshow("TIF image", image_tif);
waitKey(0);
return 0;
}
```
这个例子中,我们首先使用opencv读取一张jpg格式的图像,然后对它进行旋转,然后使用save_tiff函数保存为tif格式的图像。在保存过程中,我们使用了libtiff的函数来设置图像的各种属性,然后使用TIFFWriteScanline函数逐行写入图像数据。最后,我们再使用opencv读取保存的tif格式图像并显示。
在读取tif格式图像时,需要使用IMREAD_ANYDEPTH和IMREAD_ANYCOLOR参数来读取图像的深度和颜色信息。如果不指定这些参数,则可能会导致图像显示不正确。
阅读全文