opencv图像灰化_opencv读入图像、灰度化、归一化、向量化

平台:win7+opencv2.4.4+vs2008

功能:实现对图像的读入、灰度化、归一化和向量化。

代码:

//这里的头文件都是vs2008的,与vc6.0有多不同

#include

#include

using namespace std;

using namespace cv;

void main(int argc, char* argv[])

{

IplImage *src;

src = cvLoadImage("D:\\image.jpg"); //这里将lena.jpg和lena.cpp文件放在同一个文件夹下

cvNamedWindow("src",CV_WINDOW_AUTOSIZE);

cvMoveWindow("src",0,50);

cvShowImage("src",src);

//图像灰度化

IplImage* gray_image;

gray_image = cvCreateImage(cvGetSize(src),8,1);

cvCvtColor(src,gray_image,CV_BGR2GRAY);

//cvNamedWindow("gray",CV_WINDOW_AUTOSIZE);

//cvMoveWindow("gray",100,100);

//cvShowImage("gray",gray_image);

//尺度归一化

IplImage* norm_image;

CvSize norm_cvsize;

norm_cvsize.width = 100; //目标图像的宽

norm_cvsize.height = 100; //目标图像的高

norm_image = cvCreateImage(norm_cvsize, gray_image->depth,gray_image->nChannels); //构造目标图象

cvResize(gray_image, norm_image, CV_INTER_LINEAR); //缩放源图像到目标图像

//cvNamedWindow("norm",CV_WINDOW_AUTOSIZE);

//cvMoveWindow("norm",150,150);

//cvShowImage("norm",norm_image);

//图像转化成矩阵

CvMat* norm_mat = cvCreateMat(norm_image->height,norm_image->width,CV_32FC1);//定义一个指向CvMat对象的指针

cvConvert(norm_image,norm_mat);

//变成行向量(默认为行向量)

CvMat vecHead,*vecRow;

vecRow=cvReshape( norm_mat, &vecHead, 0, 1 );//vec是得到的一维向量

//矩阵转置从而得到列向量

CvMat* col_mat = cvCreateMat(norm_image->height,norm_image->width,CV_32FC1);

cvTranspose( norm_mat, col_mat );

//变成列向量(获得列向量需要装置矩阵)

CvMat colHead,*vecCol;

vecCol=cvReshape( col_mat, &colHead, 0, 1 );//得到的一维向量

//显示向量元素

int S=norm_cvsize.width*norm_cvsize.width;

//给列向量赋值

float c=0,col[10000]={0};

float *p;//获得矩阵元素(0,0)的指针

p = (float*)cvPtr1D(vecCol, 0,0);

for(int i = 0; i

{

//printf("%f\t",*p/255);

col[i]=*p/255;

c=col[i];

printf("%f\t",c);

p++;

}

cvWaitKey(0);//按需要0课改为任意值

cvDestroyAllWindows();

cvReleaseImage(&src);

cvReleaseImage(&gray_image);

cvReleaseImage(&norm_image);

cvReleaseMat(&norm_mat);

system("pause");//可加可不加

}

本代码经本人调试均已通过,而且已得到应用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值