CV图像转换

原创 2016年05月30日 22:46:25

 需要自己写颜色空间转换的小程序,其中涉及到LOG运算及atan运算,所以在运算过程中用到double类型数据,但最后许转换为IPL_DEPTH_8U类型,故申请了一幅图像IplImage* hue64f = cvCreateImage( cvGetSize(src),IPL_DEPTH_64F, 1 );来存储中间变量。但是问题也随之而来。

问题1:按照公式计算完,然后再应用ConvertScale转换数据类型,但转换结果都是0;

然后从头开始查找错误

问题二:数据中存在1.#IND,1.#INF类似数据;

原因:1)像素值为0计算LOG值为负无穷;2)在计算除法时注意判断分母是否为0,如果接近于0也会出现这种情况,所以主要原因就是运算非法,这是在写程序时常常忽略的地方。

问题三:计算中间变量为DOUBLE的数据存为hue64f的像素点,再次访问不是原来得到的数据;

原因:之前访问数据元素都是IPL_DEPTH_8U类型的,而自己习惯采用指针访问,访问为

int step=src->widthStep; uchar *srcdata=(uchar*)src->imageData;

循环访问:srcdata[i*step+j*3]。

但是在double型数据访问的时候要注意为以下方式,自己就是忽略了这些东西,使自己读到的像素值总不对。
int hue64fstep=hue64f->widthStep/sizeof(double); double *hue64fdata=(double*)hue64f->imageData;

问题四:由64F转换到8U,线性映射过程中需要注意范围。

解决方法找到的有两种:用两个函数1)cvNormalize(hue64f,hue64f,1,0,CV_MINMAX);  //hue64f为64F位深,将其归一化到0-1之间
//src的值为0-1,乘以scale也就是255,则dst的值变为0-255,符合要求
cvConvertScale(hue64f,hue8u,255,0);

2)double minVal;
double maxVal;
cvMinMaxLoc(hue64f, &minVal, &maxVal);
printf("%f ",minVal);
printf("%f",maxVal);
// Normalize image (0 - 255) to be observed as an u8 image
double scale = 255/(maxVal - minVal);
double shift = -minVal * scale;
cvConvertScale(hue64f,hue8u,scale,shift);

关于浮点数运算出错链接:http://zhidao.baidu.com/question/235292334.html

浮点图像转为8u图像有用的链接:

http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=17773&p=57896&hilit=cvMinMaxLoc#p57896

http://hi.baidu.com/25wensanmu/blog/item/37d8359031ee4897a877a486.html

http://hi.baidu.com/s100400541/blog/item/78d5380d4f56ea336a60fb7f.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

OpenCV学习笔记(24)CLR模式下System::Drawing::Bitmap与cv::Mat图像格式的转换

最近用到了一个C#写成的图像算法类,在C++ OpenCV下使用,其中涉及到图像格式在 cv::Mat 和 .Net Bitmap 的互换。网上搜了一些相关程序,总结如下: (1)cv::Mat 至...

OpenCV学习笔记二:灰色图像转换成彩色图像 非CV_GRAY2RGB

突然间想要将灰色图像转换成彩色图像。 因为看到CV_GRAY2RGB这个cvtColor函数的参数标量是存在的 结果出来的和灰度图像没什么区别   彩色图像转换成灰度图像原...

ROS视觉和图像-ROS和OpenCV图像转换桥梁cv_bridge

ROS和OpenCV图像转化桥梁cv_bridge学习
  • x_r_su
  • x_r_su
  • 2016年09月29日 18:50
  • 2638

CV图像分割工程

  • 2015年10月28日 16:41
  • 2.69MB
  • 下载

CV模型图像分割Matlab

  • 2010年03月23日 16:24
  • 1KB
  • 下载

python里使用cv2.goodFeaturesToTrack()函数追踪图像里的关键点

首先需要对cv2.goodFeaturesToTrack函数有一个基本的了解:     详细的介绍在这里:http://baike.baidu.com/link?url=zPK3iMJJfkKO0k...

CV图像分割

  • 2015年04月15日 09:06
  • 21KB
  • 下载

图像分割CV算法

  • 2014年12月03日 09:26
  • 2KB
  • 下载

python-opencv(cv2) 之一 图像的简单读取

源码:#!/usr/bin/env python #coding=utf-8 __author__ = 'zhangdebin'import cv2if __name__ == '__main__':...

图像融合基于open CV

  • 2010年06月29日 12:53
  • 720KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CV图像转换
举报原因:
原因补充:

(最多只允许输入30个字)