碰到的問題和解決:
1。在將圖像轉(zhuǎn)化成灰度的時(shí)候發(fā)生了錯(cuò)誤,用的是cvCvtColor函數(shù),但是出現(xiàn)了錯(cuò)誤。
試過了幾遍都沒有效果,不過后來發(fā)現(xiàn)可能是通道的原因,改正之后,又與前面的有沖突,這個(gè)時(shí)候突然向?qū)б茸鲆粋€(gè)判斷截取圖像大小的功能。所以剛好建立一個(gè)新的灰度圖像,通道設(shè)置為1,然后實(shí)現(xiàn)了將這個(gè)賦值過去的,得到大小合適,而且是灰度的圖像。
2.出現(xiàn)了不合適的type,原因是采用的參數(shù)不對,或者是前后的內(nèi)容不一致。比如說在進(jìn)行直方圖采樣的時(shí)候,參數(shù)傳遞是有講究的,如果不慎,容易出現(xiàn)錯(cuò)誤。
3.MFC中出現(xiàn)錯(cuò)誤。this指針只能用在當(dāng)前類中,而在static函數(shù)中,如果出現(xiàn)就會(huì)報(bào)錯(cuò),很明顯的錯(cuò)誤,java老師也講過,static是類變量,而this是針對于一個(gè)實(shí)例的。
4.結(jié)構(gòu)體內(nèi)容,特別是IplImage結(jié)構(gòu)體有很大的作用,其中,height和width都一個(gè)重要的作用,還有,你要重新定義一個(gè)大小的話,用cvResize函數(shù)來實(shí)現(xiàn),因?yàn)檫@個(gè)函數(shù)可以實(shí)現(xiàn)將目標(biāo)圖像結(jié)構(gòu)的指針轉(zhuǎn)化成你要得到的圖像。此時(shí)就可以將其轉(zhuǎn)化成灰度圖像。
1
if ((height>200)||(width>200))
2
{
3
IplImage *tmp = cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);
4
cvResize(newImg, tmp, CV_INTER_LINEAR); //縮放源圖像到目標(biāo)圖像
5
IplImage *greyImage = cvCreateImage(cvSize(tmp->width,tmp->height),IPL_DEPTH_8U,1);
6
cvCvtColor(tmp,greyImage,CV_BGR2GRAY);
7
cvSaveImage(outfilename,greyImage);
8
}
9
else
10
{
11
IplImage *greyImage = cvCreateImage(cvSize(newImg->width,newImg->height),IPL_DEPTH_8U,1);
12
cvCvtColor(newImg,greyImage,CV_BGR2GRAY);
13
cvSaveImage(outfilename,greyImage);
14
}
5.具體的參數(shù),特別是那些定義的宏,是有特殊意義的。
一個(gè)樣例,本來生成的灰度圖片應(yīng)該是bmp格式,無奈不支持,所以截圖來處理。
posted on 2009-12-19 20:49
deercoder 閱讀(5868)
評論(2) 編輯 收藏 引用 所屬分類:
OpenCV / OpenGL