mapgis6.7中彩色tif文件转换成msi文件,打开成了黑白色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mapgis6.7中彩色tif文件转换成msi文件,打开成了黑白色相关的知识,希望对你有一定的参考价值。
而且,直接把tif格式的文件作为光栅文件调入,显示出来的都是黑的,什么也看不出来,有没有高手给解答下。本意是要图重新描一遍的,颜色变了,很多东西就看不出来了
有2种情况:一种情况是你的TIF文件格式有问题,请用PS或画图打开另存一下,PS下要选择非压缩的TIF格式,压缩的格式mapgis不能正确识别。
如果上面的方法还解决不了你的问题,那就是另一种情况了,是系统兼容性出现了问题,请到地信网搜索下载一个补丁。(贴链接的回答会被百度当成广告,没法提交,你只好自己搜了) 参考技术A 图像分析里面设置一下RGB
Qt 中彩色图像转换为灰度图
近期在做几个图像处理相关的项目。里面有一个操作就是须要先将彩色图像转换为灰度图像。
QImage 有一个convertToFormat方法。最開始一直用这个函数来实现。
可是今天细致看了看,发现这个函数转换出的灰度图与原始图像的亮度似乎是有差别的。比方说以下这副图像:
用以下这三行代码转换:
QImage image2 = image.convertToFormat(QImage::Format_Indexed8); image2.setColorCount(256); for(int i = 0; i < 256; i++) { image2.setColor(i, qRgb(i, i, i)); }
得到的结果是这种:
明显转换之后的图像要暗一些,对照度也差非常多。说明这种方法是错误的。事实上想想也能知道,convertToFormat 仅仅是选取了原始图像中出现最多的那些颜色,并以此生成了colorTable。这个colorTable 的顺序与亮度事实上不一定具有线性关系。我这样任意的转换从原理上就是说不通的。
后来花了点时间,自己写了个转换代码:
QImage toGray( QImage image ) { int height = image.height(); int width = image.width(); QImage ret(width, height, QImage::Format_Indexed8); ret.setColorCount(256); for(int i = 0; i < 256; i++) { ret.setColor(i, qRgb(i, i, i)); } switch(image.format()) { case QImage::Format_Indexed8: for(int i = 0; i < height; i ++) { const uchar *pSrc = (uchar *)image.constScanLine(i); uchar *pDest = (uchar *)ret.scanLine(i); memcpy(pDest, pSrc, width); } break; case QImage::Format_RGB32: case QImage::Format_ARGB32: case QImage::Format_ARGB32_Premultiplied: for(int i = 0; i < height; i ++) { const QRgb *pSrc = (QRgb *)image.constScanLine(i); uchar *pDest = (uchar *)ret.scanLine(i); for( int j = 0; j < width; j ++) { pDest[j] = qGray(pSrc[j]); } } break; } return ret; }
利用这个代码的转换结果例如以下:
这个的转换效果明显要好非常多。
看来写代码还是要精益求精。不能凑合着来啊。
以上是关于mapgis6.7中彩色tif文件转换成msi文件,打开成了黑白色的主要内容,如果未能解决你的问题,请参考以下文章