在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码!
来源:互联网 发布:网络大电影题材 编辑:程序博客网 时间:2024/05/25 21:35
分段线性变换的理论基础这里我就不多打字了,如有需要的可以通过链接查看我截的理论基础的图,不过要看懂下面的代码还真需要看一看,因为程序是根据这个理论基础写的!
链接为:http://pan.baidu.com/s/1dFoFuSD
首先给MATLAB的源码吧!
clear all;close all;clc;I=imread('coins.png');B=MySegmentLinear(I,0.3,0.7,0.13,0.85);
其中MySegmentLinear是自己写的函数,函数M文件下载链接:http://pan.baidu.com/s/1boAhUu7
再给OpenCV环境下写的C代码吧!程序中用到的图像下载链接http://pan.baidu.com/s/1slilbPF
#include <opencv2/opencv.hpp> #include <opencv2/legacy/compat.hpp> #include <fstream>using namespace std; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") void MySegmentLinear(IplImage *src, IplImage *dst,double x1,double x2,double y1,double y2){IplImage *pOutImage_64F = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F,1);cvConvertScale(src,pOutImage_64F);int M,N;M=src->height;N=src->width;int i,j;double CurrentPixelValue;for(i=0;i<M;i++)for(j=0;j<N;j++){ CurrentPixelValue=cvGet2D(pOutImage_64F,i,j).val[0];CvScalar DstPixelValue;if(CurrentPixelValue<x1){DstPixelValue.val[0] = y1 * CurrentPixelValue / x1;cvSet2D(pOutImage_64F,i,j,DstPixelValue);//set the (i,j) pixel value}else if(CurrentPixelValue>x2){DstPixelValue.val[0] = (CurrentPixelValue-x2)*(255-y2)/(255-x2) + y2;cvSet2D(pOutImage_64F,i,j,DstPixelValue);//set the (i,j) pixel value}else{DstPixelValue.val[0] = (CurrentPixelValue-x1)*(y2-y1)/(x2-x1) + y1;cvSet2D(pOutImage_64F,i,j,DstPixelValue);//set the (i,j) pixel value} }cvConvertScale(pOutImage_64F,dst);}int main(){// 从文件中加载原图 IplImage *pSrcImage = cvLoadImage("coins.png", CV_LOAD_IMAGE_UNCHANGED); //创建输出的图像IplImage *pOutImage_8U = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);MySegmentLinear(pSrcImage,pOutImage_8U,0.3*255,0.7*255,0.13*255,0.85*255);//输出中间值,与MATLAB的结果对比,看是否正确,仅为调试时用unsigned char watch_pOutImage_8U[100];int i;for(i=0;i<100;i++){watch_pOutImage_8U[i]=cvGet2D(pOutImage_8U,47,i+200).val[0]; }return 0;}
下面的截图证明运行结果是正确的:
-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号248787278
0 0
- 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码!
- OpenCV灰度值线性变换与分段线性变换
- 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数
- 图像处理 灰度的线性变换
- 在OpenCV环境下写的两个图像平移C和C++源代码!
- 图像旋转的MATLAB和OpenCV源码!
- OpenCV环境下计算并绘制灰度直方图的源码!
- [mtalab图像处理] 灰度的线性变换
- 实验二 灰度图像的线性变换
- MATLAB 灰度线性变换
- opencv中灰度线性变换问题
- 图像转置的MATLAB和OpenCV源码!
- 灰度的线性变换
- 数字图像处理MFC程序设计之灰度图像的线性变换
- 灰度图像的直方均衡、线性变换与线性拉伸
- matlab求灰度图像的灰度直方图
- OpenCV 读取灰度图像的灰度值
- Matlab图像的灰度直方图
- android ObjectAnimator基本应用
- shadow$_monitor_和shadow$_klass_
- 《C++primer》读书笔记三
- opencv里的norm范数和图像里的深度和通道数的理解和意义和相机标定后对内外参数的质量评估
- NYOJ 30 Gone Fishing(贪心)(个人理解笔记)
- 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码!
- 更新到android studio2.0后,运行时出现一个问题:Error running app: Instant Run requires 'Tools | Android | Enable AD
- R语言︱分布函数与概率密度+随机数产生
- 生产消费者模型实现
- 凹凸按钮样式
- 第八周项目一-数组做数据成员(3)
- bootstrap得动态进度条
- EventBus使用详解(二)——EventBus使用进阶
- 异步加载图片-SDWebImage