图像的对数变换

对数变换的通用形式: S= C* LOG(1+ R)

                                  (其中C是个常数,并设R>= 0)


下面介绍些要用的函数:

cvSet*D
修改指定的数组 

void cvSet1D( CvArr* arr, int idx0, CvScalar value );
void cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
void cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );
void cvSetND( CvArr* arr, int* idx, CvScalar value );
arr 
输入数组 
idx0 
元素下标的第一个成员,以0为基点 
idx1 
元素下标的第二个成员,以0为基点 
idx2 
元素下标的第三个成员,以0为基点 
idx 
元素下标数组 
value 
指派的值 
函数 cvSet*D 指定新的值给指定的数组元素。对于稀疏矩阵如果指定节点不存在函数创建新的节点 



CvScalar 
可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器 

typedef struct CvScalar
{
double val[4]; 
}
CvScalar;
/* 构造函数:用val0初始化val[0]用val1初始化val[1], 以此类推*/


代码:

[cpp]  view plain copy
  1. // 对数变换.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "opencv2/opencv.hpp"  
  6.   
  7. int _tmain(int argc, _TCHAR* argv[])  
  8. {  
  9.     cvNamedWindow("Src", CV_WINDOW_AUTOSIZE);  
  10.     cvNamedWindow("Dst", CV_WINDOW_AUTOSIZE);  
  11.   
  12.     IplImage* src= 0;  
  13.     CvScalar scalar;  
  14.     int i;  
  15.     int j;  
  16.   
  17.     //加载图片  
  18.     src= cvLoadImage("F://Opencv_picture//1211.jpg", 0);   // 这里要把图像强制转换为灰度图  
  19.     if(!src )  
  20.     {  
  21.         printf("Cannot not open this picture!\n");  
  22.     }  
  23.   
  24.     //显示原图  
  25.     cvShowImage("Src", src);  
  26.   
  27.     for(i=0; i< src->height; i++)  
  28.     {  
  29.          for(j=0; j< src->width; j++)  
  30.         {  
  31.             scalar= cvGet2D(src, i, j);   
  32.            scalar.val[0]=32* log10( scalar.val[0])/ log10(2.0);  
  33.            cvSet2D(src, i, j, scalar);  
  34.         }  
  35.     }  
  36.     //显示处理后的图片  
  37.     cvShowImage("Dst", src);  
  38.   
  39.     cvWaitKey(0);    // 暂停  
  40.   
  41.   
  42.     return 0;  
  43. }  

结果图:



PS:

src= cvLoadImage("F://Opencv_picture//1211.jpg", 0); // 这里要把图像强制转换


在加载图像时,一定要把图像强制转换为灰度图,要不然得不到上面的结果图。

下面的是没有在CVLoadImage()中把第二个参数设置为0(即强制转换为灰度图)

结果图:


哎,处理后竟然变色了尴尬,和想要的结果不同。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值