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");//可加可不加


}



本代碼經本人調試均已通過,而且已得到應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章