最近看到一篇論文說可以用 平滑處理 + 二值化做處理
所以就來試試看~~
在二值化 跟 平滑處理 參數做調整 依需求結果都會不一樣
程式碼:
#include
<iostream>
#include
<stdio.h>
#include
<cv.h>
#include
<highgui.h>
using
namespace
cv ;
void
BW(IplImage* img
, int color)//二值化BW(圖,二值化參數) RGB<參數 RGB=255255255
{
int
Height=cvGetDimSize(img,0);//讀取矩陣高度
int
Width=cvGetDimSize(img,1);//讀取矩陣寬度
for(int
y = 0 ; y < Height ; y++)
for(int
x = 0 ; x < Width ; x++ )
{
if( !(cvGet2D(img,
y , x ).val[2] < color &&
cvGet2D(img, y , x ).val[1] < color &&
cvGet2D(img, y , x ).val[0] < color))
cvGet2D(img, y , x ).val[1] < color &&
cvGet2D(img, y , x ).val[0] < color))
cvSet2D(img,y,x,CV_RGB(255,255,255));//特別注意 給值是
(y,x)
else
cvSet2D(img,y,x,CV_RGB(0,0,0));//特別注意 給值是
(y,x)
}
}
int
main()
{
IplImage*
img = cvLoadImage("D:/image/car/BO.png",1);//loading圖
cvNamedWindow("img01",1);
cvShowImage("img01",
img);
for(int
i = 0; i < 4; i++)//計數
cvSmooth(img, img, CV_GAUSSIAN, 3, 0, 0);//平滑處理
BW(img , 100);//二值化
cvNamedWindow("img02",1);
cvShowImage("img02",
img);
cvWaitKey(0);
}
結果: 左圖放大圖 右圖校正結果
參考資料:
http://tw.search.yahoo.com/r/_ylt=A2oKmJJHRaJShTQAMVlr1gt.;_ylu=X3oDMTE2MmE3YTc0BHNlYwNzcgRwb3MDNQRjb2xvA3NnMwR2dGlkA1ZJUFRXNDZfNDcx/SIG=146g51jc8/EXP=1386395079/**http%3a//ethesys.lib.mcu.edu.tw/ETD-db/ETD-search/getfile%3fURN=etd-0629105-163518%26filename=etd-0629105-163518.pdf
沒有留言:
張貼留言