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

平台:win7+opencv2.4.4+vs2008

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

代码:

//这里的头文件都是vs2008的,与vc6.0有多不同
#include <opencv2\opencv.hpp>  
#include<iostream>
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 <S; 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");//可加可不加


}



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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值