資源簡介
實現對獼猴桃果實的圖像處理,包含二值化、濾波、提取果實目標、圖像相與、邊緣化過程。

代碼片段和文件信息
//?kiwifruit.cpp?:?定義控制臺應用程序的入口點。
#include?“stdafx.h“
#include?“stdio.h“
#include?“stdlib.h“
#include?
#include??
#include?
#include?
#include?
#include?
#include?
#include?“math.h“
#include?“cv.h“
??using?namespace?cv;
??using?namespace?std;
?? static?inline?bool?ContoursSortFun(vectorcontour1vectorcontour2)
{
return(cv::contourArea(contour1)>cv::contourArea(contour2));
?}
//閾值化算法?threshold?algorithm
??int?height;
??int?width;
??int?otsu(IplImage*?A?IplImage*?B)
{
???long?N?=?height?*?width;
???int?h[256];
???double?p[256]u[256]w[256];
???for(int?i?=?0;?i?256;?i++)
???{
??????h[i]?=?0;
??????p[i]?=?0;
??????u[i]?=?0;
??????w[i]?=?0;
???}
???for(int?i?=?0;?i????????for(int?j?=?0;?j??????????for(int?k?=?0;?k?256;?k++)
?????????{
????????????if(((uchar*)(A->imageData?+?A->widthStep*i))[j]?==?k)
????????????h[k]++;
?????????}
?
????for(int?i?=?0;?i?256;?i++)
???????p[i]?=?h[i]?/?double(N);
?
????int?T?=?0;
????double?uTthegma2fang;
????double?thegma2fang_max?=?-10000;
????for(int?k?=?0;?k?256;?k++)
????{
???????uT?=?0;
???????for(int?i?=?0;?i?<=?k;?i++)
??????{
??????????u[k]?+=?i*p[i];
??????????w[k]?+=?p[i];
???????}
?
??????for(int?i?=?0;?i?256;?i++)
?????????uT?+=?i*p[i];
???
??????thegma2fang?=?(uT*w[k]?-?u[k])*(uT*w[k]?-?u[k])?/?(w[k]*(1-w[k]));
??????if(thegma2fang?>?thegma2fang_max)
??????{
??????????thegma2fang_max?=?thegma2fang;
??????????T?=?k;
???????}
?????}
?
?????for(int?i?=?0;?i?????????for(int?j?=?0;?j?????????????if(((uchar*)(A->imageData?+?A->widthStep*i))[j]?>?T)
????????????????((uchar*)(B->imageData?+?B->widthStep*i))[j]?=?255;
????????????else
???????????????((uchar*)(B->imageData?+?B->widthStep*i))[j]?=?0;
?printf(“the?threshold=%d\n“T);
?return?T;
}
int?_tmain(int?argc?_TCHAR*?argv[])
{
//load?the?original?image
IplImage*src;
src=cvLoadImage(“kiwifruit.jpg“);
cvNamedWindow(“1)original?image“1);
cvShowImage(“1)original?image“src);
//converted?to?a?mat?type?for?1.1R-G
vectorchannels;
Mat?src0(src);
Mat?imgBchannel;
Mat?imgGchannel;
Mat?imgRchannel;
//1.1R-G:extraction?for?three-channel
split(src0channels);
imgBchannel=channels.at(0);
imgGchannel=channels.at(1);
imgRchannel=channels.at(2);
Mat?dst0;
dst0=1.1*imgRchannel-imgGchannel;
namedWindow(“2)1.1R-G“);
imshow(“2)1.1R-G“dst0);
//歸一化?narmalization
Mat?out0;
normalize(dst0out00255NORM_MINMAX);
imshow(“3)narmalized?image“out0);
//中值濾波?medium?filtering
Mat?out1;
medianBlur(out0out15);
imshow(“4)Image?after?meidan?filtering“out1);
//Otsu閾值化?Otsu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????118272??2017-01-05?21:35??kiwifruit\Debug\kiwifruit.exe
?????文件????1789148??2017-01-05?21:35??kiwifruit\Debug\kiwifruit.ilk
?????文件????2231296??2017-01-05?21:35??kiwifruit\Debug\kiwifruit.pdb
?????文件????2359296??2017-01-05?21:35??kiwifruit\ipch\kiwifruit-abc8e420\kiwifruit-7e07a6ea.ipch
?????文件???????1738??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\cl.command.1.tlog
?????文件??????23378??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\CL.read.1.tlog
?????文件???????1270??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\CL.write.1.tlog
?????文件????????406??2017-01-01?10:08??kiwifruit\kiwifruit\Debug\kiwifruit.exe.em
?????文件????????472??2017-01-01?10:08??kiwifruit\kiwifruit\Debug\kiwifruit.exe.em
?????文件????????381??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\kiwifruit.exe.intermediate.manifest
?????文件?????????90??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\kiwifruit.lastbuildstate
?????文件???????3640??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\kiwifruit.log
?????文件?????244382??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\kiwifruit.obj
?????文件????1179648??2017-01-01?10:08??kiwifruit\kiwifruit\Debug\kiwifruit.pch
?????文件????????713??2017-01-01?10:57??kiwifruit\kiwifruit\Debug\kiwifruit.vcxprojResolveAssemblyReference.cache
?????文件??????????0??2017-01-01?10:08??kiwifruit\kiwifruit\Debug\kiwifruit.write.1.tlog
?????文件????????208??2017-01-01?10:08??kiwifruit\kiwifruit\Debug\kiwifruit_manifest.rc
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件??????????2??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件???????3642??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件???????9244??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
?????文件???????1332??2017-01-05?21:35??kiwifruit\kiwifruit\Debug\li
............此處省略30個文件信息
- 上一篇:串口通信的Verilog代碼及TestBench
- 下一篇:25個匯編小程序案例
評論
共有 條評論