图像变换--灰度切割、位图切割
灰度切割:分为两种情况,一种情况是将某段阈值的图像设为一个较高值,其它灰度指定一个较低值。另一种情况是所需范围的灰度变亮,但仍保持图像的背景和灰度色调。
for (int i = 0; i < img_height - 1; i++)
{
for (int j = 0; j < img_width - 1; j++)
{
uchar cur = data[i * img_width + j];
if (cur > 20 && cur < 200)
{
cur = cur + 50;
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}
data[i * img_width + j] = cur;
}
}
}
位图切割:就8比物图像的位平面抽取而主,说明用一个灰度阈值变换函数处理输入图像可以获得位平面7的二值图像并不困难。该灰度阈值变换函数:(1)把图像中0和127间的所有灰度映射到一个灰度级例如(0)(2)把129到255间的灰度映射为另一种灰度级。例如(255)
#include "math.h"
#include"cv.h"
#include"highgui.h"
int main(int argc,char **argv)
{
IplImage *pImg;
IplImage *pImg_gray;
IplImage *pImg_cut[8];
if(argc == 3 && (pImg = cvLoadImage(argv[1],-1))!= 0)
{
pImg_gray = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
cvCopy(pImg,pImg_gray,NULL);
int img_width = pImg->width;//image width
int img_height = pImg->height;//image height
uchar *data;
data = (uchar *)pImg_gray->imageData;
uchar *data_cut[8];
pImg_cut[0] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[1] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[2]= cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[3] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[4] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[5] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[6] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[7] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U,1);
uchar zhi = 1;
for (int k = 0; k< 8 ;k++)
{
data_cut[k] = (uchar *)pImg_gray->imageData;
if (k > 0)
zhi = zhi<<1;
for (int i = 0; i< img_height; i++)
{
for (int j = 0; j< img_width ; j++)
{
uchar cur = data[i * img_width + j];
cur = cur & 0x40; //按位与运算
if (cur == 1)
{
cur = 255;
}
else cur = 0;
data[i * img_width + j] = cur;
}
}
cvCopy(pImg_gray,pImg_cut[k],NULL);
cvCopy(pImg,pImg_gray,NULL);
}
cvNamedWindow("log1",1);//create window
cvNamedWindow("log2",2);//create window
cvNamedWindow("log3",3);//create window
cvNamedWindow("log4",4);//create window
cvNamedWindow("log5",5);//create window
cvNamedWindow("log6",6);//create window
cvNamedWindow("log7",7);//create window
cvNamedWindow("log8",8);//create window
cvShowImage("log1", pImg_cut[0]);
cvShowImage("log2", pImg_cut[1]);
cvShowImage("log3", pImg_cut[2]);
cvShowImage("log4", pImg_cut[3]);
cvShowImage("log5", pImg_cut[4]);
cvShowImage("log6", pImg_cut[5]);
cvShowImage("log7", pImg_cut[6]);
cvShowImage("log8", pImg_cut[7]);
cvWaitKey(0);
cvDestroyWindow("canny");
cvReleaseImage(&pImg);
cvReleaseImage(&pImg_gray);
return 0;
}
return -1;
}
#include "math.h"
#include"cv.h"
#include"highgui.h"
//#include <iostream>
//using namespace std;
int main(int argc,char **argv)
{
/*IplImage *img=cvLoadImage("F:\HU\testopencv\pp.jpg");
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvShowImage("Example1",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1"); */
//图像反转
IplImage *pImg;
IplImage *pImg_gray;
IplImage *pImg_cut[8];
/*IplImage *pImg_cut0;
IplImage *pImg_cut1;
IplImage *pImg_cut2;
IplImage *pImg_cut3;
IplImage *pImg_cut4;
IplImage *pImg_cut5;
IplImage *pImg_cut6;
IplImage *pImg_cut7;*/
/*pImg_cut0 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut1 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut2 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut3 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut4 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut5 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut6 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut7 = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);*/
//IplImage *pImg_bi;
if(argc == 3 && (pImg = cvLoadImage(argv[1],-1))!= 0)
{
pImg_gray = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
// cvCvtColor(pImg,pImg_gray,CV_BGR2GRAY);
cvCopy(pImg,pImg_gray,NULL);
//pImg_bi = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
//cvThreshold(pImg_gray,pImg_bi,127,255 ,CV_THRESH_BINARY);
//int a = pImg_bi->nChannels;
//int bi_width = pImg_bi->
int img_width = pImg->width;//image width
int img_height = pImg->height;//image height
uchar *data;
data = (uchar *)pImg_gray->imageData;
uchar *data_cut[8];
pImg_cut[0] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[1] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[2]= cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[3] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[4] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[5] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[6] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
pImg_cut[7] = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
/* //for (int i = 0; i < img_height - 1; i++)
//{
// for (int j = 0; j < img_width - 1; j++)
// {
// uchar cur = data[i * img_width + j];
//
// //cur = 3 * log((double)cur + 1.0);
// cur = 6 * sqrt((float)cur);
// if (cur < 0)
// {
// cur =0;
// }
// else if(cur > 255)
// {
// cur =255;
// }
// }
//}
//line trans func线性变换
float ratio = -3;//斜率
float intercept = -838;//截距
for (int i = 0; i < img_height - 1; i++)
{
for (int j = 0; j < img_width - 1; j++)
{
uchar cur = data[i * img_width + j];
/*cur = ratio * cur + intercept;//线性变换
data[i * img_width + j] = cur;
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}*/
/* if (cur > 20 && cur < 200)
{
cur = cur + 50;
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}
data[i * img_width + j] = cur;
}
}
}*/
/*for (int i = 0; i< img_height -1 ; i++)
{
for (int j = 0; j< img_width -1; j++)
{
printf("%d",data[i * img_width + j]);
}
printf("\n");
}*/
// cvSaveImage(argv[2],pImg_bi);
uchar zhi = 1;
for (int k = 0; k< 8 ;k++)
{
data_cut[k] = (uchar *)pImg_gray->imageData;
if (k > 0)
zhi = zhi<<1;
for (int i = 0; i< img_height; i++)
{
for (int j = 0; j< img_width ; j++)
{
uchar cur = data[i * img_width + j];
cur = cur & 0x40; //按位与运算
if (cur == 1)
{
cur = 255;
}
else cur = 0;
data[i * img_width + j] = cur;
}
}
cvCopy(pImg_gray,pImg_cut[k],NULL);
cvCopy(pImg,pImg_gray,NULL);
}
cvNamedWindow("log1",1);//create window
cvNamedWindow("log2",2);//create window
cvNamedWindow("log3",3);//create window
cvNamedWindow("log4",4);//create window
cvNamedWindow("log5",5);//create window
cvNamedWindow("log6",6);//create window
cvNamedWindow("log7",7);//create window
cvNamedWindow("log8",8);//create window
cvShowImage("log1", pImg_cut[0]);
cvShowImage("log2", pImg_cut[1]);
cvShowImage("log3", pImg_cut[2]);
cvShowImage("log4", pImg_cut[3]);
cvShowImage("log5", pImg_cut[4]);
cvShowImage("log6", pImg_cut[5]);
cvShowImage("log7", pImg_cut[6]);
cvShowImage("log8", pImg_cut[7]);
cvWaitKey(0);
cvDestroyWindow("canny");
cvReleaseImage(&pImg);
cvReleaseImage(&pImg_gray);
//cvReleaseImage(&pImg_bi);
return 0;
}
//printf("%s\n %s\n%s\n", argv[0],argv[1],argv[2]);
return -1;
}
图像变换--灰度切割、位图切割相关推荐
- [数字图像处理]灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割
灰度变换,属于一个非常重要的概念.这里主要参考<Digital Image Processing> Rafael C. Gonzalez / Richard E. Woods 的第三章.书 ...
- 数字图像处理——二值、灰度和彩色图像,位图切割
二值.灰度和彩色图像处理 1. 二值.灰度图像的转换 2. 彩色图像的表示 3. 位图切割 -------------------------- -------------------------- ...
- 灰度变换-位图切割(比特平面分层)
目录 1. 介绍 2. 实现方法 3. code 4. 比特平面重建图像 1. 介绍 图像的像素值是由比特组成的.例如一副256级灰度图像中,图像是由8 bit组成. 与之前对比度拉伸的区别是,之前我 ...
- [图形图像 python]位图切割
数字图像处理中提到一个东西叫位图切割,上面说操作很简单,但是没能理解.现在理解了,总结如下: 位图切割是2,4,8,..,128,256,256是灰度值的上限,位图切割转换为灰度值在(0~2,2~25 ...
- 关于图像处理中的位图切割(Bit-pane Slicing)原理的自我见解
前段时间做过一道数字图像算法的课程一道题,就是有关位图分割算法的,但是当初没理解,我翻了几篇文章后把它弄明白了,所以我打算记录下我的想法,免得忘了. 题目: Propose a set of inte ...
- Leaflet 瓦片切割工具 切割本地图片
Leaflet 瓦片切割工具 切割本地图片 使用步骤 计算图片切割深度 生成切割的原始图片 分割图片 下载切割工具链接地址 使用步骤 先下载压缩包解压后解压, 双击打开图示切割工具 MapImageT ...
- Leaflet 瓦片切割工具 切割本地图片+示例
这里写自定义目录标题 Leaflet 瓦片切割工具 切割本地图片 使用步骤 Leaflet 瓦片切割工具 切割本地图片 使用步骤 链接: https://pan.baidu.com/s/1qaFulN ...
- java wav 切割_java切割音频文件
工具: 一个jar包即可:jave-1.0.2.jar 可以切割wav格式的音频文件 完整工程目录 就一个jar包,一个main类 代码: package com.zit; import java.i ...
- 音频切割软件 如何切割音频 切割音频的软件
不知道大家会不会有一首歌曲,想要把这个歌曲中的好听的部分,单独剪下来,切割下来,然后可以把这个切割下来的部分放进自己拍摄或者是其他视频里作为背景音乐出现,亦或者是把这个切割下来的音频,作为手机的来电铃 ...
最新文章
- .condarc文件是什么
- 一个新游戏的思路;大家来说说看,觉得好的话,我做成游戏
- 产品团队的批判性思维:如何通过合理的决策带来合理的结果?
- 双缝干涉试验为什么恐怖?
- 【数据分析】2020年创业公司到底过得怎么样?数据分析来为你揭晓
- codeforces B. High School: Become Human
- 虚拟服务器容器,docker容器和虚拟机的区别
- 怎么把matlab中的图导出,matlab的数据能保存到excel表格-如何将matlab 中输出的图形保存到Excel中去,详细点...
- Qt之QListView使用
- GID绘图和CDC类
- hdu 1255 覆盖的面积 (Bruceforce)
- Unity3d中使用自带动画系统制作下雨效果(二)
- 微软 MSCRM 教育成功案例 界面展示
- 群英传内推第001期
- tweenMax代码未定义问题
- 开环控制(自动控制理论)
- PaintFlagsDrawFilter canvas 抗锯齿
- 在智慧城市建设中 计算机模拟是一个强大的工具
- 台式机内存和服务器内存型号,台式机内存和服务器内存区分
- iptable详细配置