使用Visual Studio+OpenCV进行的Susan算子边缘检测及数米粒图像处理实验
用计算机视觉的方法处理米粒图像。功能包括:中值滤波、直方图显示、大津法和经验阈值法的阈值分割、Susan算子检测边缘、米粒计数、寻找最大米粒。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 184 2018-04-08 10:31 exp1exp1Debugexp1.log
文件 2 2018-04-08 10:31 exp1exp1Debugexp1.tlogCL.command.1.tlog
文件 225 2018-04-08 10:31 exp1exp1Debugexp1.tlogexp1.lastbuildstate
文件 0 2018-04-08 10:31 exp1exp1Debugexp1.tlogunsuccessfulbuild
文件 19456 2018-04-08 10:31 exp1exp1Debugvc141.idb
文件 135168 2018-04-08 10:31 exp1exp1Debugvc141.pdb
文件 1308 2018-04-08 10:22 exp1exp1exp1.aps
文件 4857 2018-05-04 22:11 exp1exp1exp1.cpp
文件 6084 2018-04-08 10:24 exp1exp1exp1.vcxproj
文件 1190 2018-04-08 10:24 exp1exp1exp1.vcxproj.filters
文件 165 2018-04-08 10:18 exp1exp1exp1.vcxproj.user
文件 383 2018-04-08 10:22 exp1exp1
esource.h
文件 134687 2018-05-08 13:31 exp1exp1Susan轮廓图.jpg
文件 997 2018-05-03 17:10 exp1exp1x64Debugexp1.Build.CppClean.log
文件 255 2018-05-04 22:11 exp1exp1x64Debugexp1.log
文件 546642 2018-05-04 22:11 exp1exp1x64Debugexp1.obj
文件 568 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogCL.command.1.tlog
文件 24546 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogCL.read.1.tlog
文件 380 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogCL.write.1.tlog
文件 223 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogexp1.lastbuildstate
文件 1088 2018-05-04 22:11 exp1exp1x64Debugexp1.tloglink.command.1.tlog
文件 3360 2018-05-04 22:11 exp1exp1x64Debugexp1.tloglink.read.1.tlog
文件 366 2018-05-04 22:11 exp1exp1x64Debugexp1.tloglink.write.1.tlog
文件 240640 2018-05-04 22:11 exp1exp1x64Debugvc141.idb
文件 880640 2018-05-04 22:11 exp1exp1x64Debugvc141.pdb
文件 181353 2018-05-08 13:31 exp1exp1中值滤波后的图.jpg
文件 84018 2018-05-08 13:31 exp1exp1大津法与groundtruth做减法.jpg
文件 100958 2018-05-08 13:31 exp1exp1大津法二值图.jpg
文件 134571 2018-05-08 13:31 exp1exp1最大米粒.jpg
文件 268742 2018-05-08 13:31 exp1exp1灰度图.jpg
............此处省略23个文件信息
#include
#include
#include
#include
#include
#include“opencv2/imgproc/imgproc.hpp“
using namespace std;
using namespace cv;
// 得到图像的直方图
MatND getHistogram(Mat &image)
{
MatND hist;
int channels[] = { 0 };
int dims = 1;
int histSize[] = { 256 };
float granges[] = { 0 255 };
const float *ranges[] = { granges };
calcHist(&image 1 channels Mat() hist dims histSize ranges);
return hist;
}
// 将图像直方图展示出来
Mat getHistogramImage(Mat &image)
{
MatND hist = getHistogram(image);
Mat showImage(256 256 CV_8U Scalar(0));
int i;
double maxValue = 0;
minMaxLoc(hist 0 &maxValue 0 0);
for (i = 0; i < 256; i++)
{
float value = hist.at(i);
int intensity = saturate_cast(256 - 256 * (value / maxValue));
rectangle(showImage Point(i 256 - 1) Point((i + 1) - 1 intensity) Scalar(255));
}
return showImage;
}
Mat SusanFun(Mat img)
{
//susan模板
int OffSetX[37] = { -1 0 1
-2-1 0 1 2
-3-2-1 0 1 2 3
-3-2-1 0 1 2 3
-3-2-1 0 1 2 3
-2-1 0 1 2
-1 0 1 };
int OffSetY[37] = { -3-3-3
-2-2-2-2-2
-1-1-1-1-1-1-1
0 0 0 0 0 0 0
1 1 1 1 1 1 1
2 2 2 2 2
3 3 3 };
int mHeight = img.rows;
int mWidth = img.cols;
unsigned char *ucDataImg = (unsigned char *)img.data;
Mat nImg(img.rows img.cols CV_8UC1);
unsigned char *ucDatanImg = (unsigned char *)nImg.data;
int k pixelSum sameNum;
float thresh;
for (int i = 3; i {
for (int j = 3; j {
pixelSum = 0;
sameNum = 0;
for (k = 0; k<37; k++)
{
pixelSum += ucDataImg[i+ OffSetY[k] * mWidth/50+ (j + OffSetX[k])];
thresh = (float)pixelSum / 37;//数量
if (fabs((float)ucDataImg[(i + OffSetY[k])*mWidth + (j + OffSetX[k])] - ucDataImg[i*mWidth + j]) <= thresh)
{
sameNum++;
}
}
if (sameNum<22)//质量
{
ucDatanImg[i*mWidth + j] = 255;
}
else
{
ucDatanImg[i*mWidth + j] = 0;
}
}
}
return nImg;
}
//利用直方图选择阈值
int SelectThreshold(Mat image) {
int i;
float max = 0 min = 0;
MatND hist;
hist = getHistogram(image);
for (i = 1; i <= 255; i++)
{
if (hist.at(i-1) < hist.at(i)&& hist.at(i)>hist.at(i + 1)&& hist.at(i)>110)
{
break;
}
}
for (i; i <= 255; i++)
{
if (hist.at(i) <100)
break;
}
return i;
}
int main() {
uint i;
CvMemStorage* stor = cvCreateMemStorage(0);
vector > contours;
vector hierarchy;
int thresh1;
double thresh2;
Mat ImgbinImgsubImg1 subImg2ground grayGroundotsuImgmaxrice;
Mat grayImgmedImgsusanImg;
//打开图像
Img = imread(“..\rice.jpg“1);
ground = imread(“..\米粒图二值图.jpg“ 1);
imshow(“groundtruth“ground);
//转换为灰度图像
cvtColor(Img grayImg CV_BGR2GRA
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 184 2018-04-08 10:31 exp1exp1Debugexp1.log
文件 2 2018-04-08 10:31 exp1exp1Debugexp1.tlogCL.command.1.tlog
文件 225 2018-04-08 10:31 exp1exp1Debugexp1.tlogexp1.lastbuildstate
文件 0 2018-04-08 10:31 exp1exp1Debugexp1.tlogunsuccessfulbuild
文件 19456 2018-04-08 10:31 exp1exp1Debugvc141.idb
文件 135168 2018-04-08 10:31 exp1exp1Debugvc141.pdb
文件 1308 2018-04-08 10:22 exp1exp1exp1.aps
文件 4857 2018-05-04 22:11 exp1exp1exp1.cpp
文件 6084 2018-04-08 10:24 exp1exp1exp1.vcxproj
文件 1190 2018-04-08 10:24 exp1exp1exp1.vcxproj.filters
文件 165 2018-04-08 10:18 exp1exp1exp1.vcxproj.user
文件 383 2018-04-08 10:22 exp1exp1
esource.h
文件 134687 2018-05-08 13:31 exp1exp1Susan轮廓图.jpg
文件 997 2018-05-03 17:10 exp1exp1x64Debugexp1.Build.CppClean.log
文件 255 2018-05-04 22:11 exp1exp1x64Debugexp1.log
文件 546642 2018-05-04 22:11 exp1exp1x64Debugexp1.obj
文件 568 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogCL.command.1.tlog
文件 24546 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogCL.read.1.tlog
文件 380 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogCL.write.1.tlog
文件 223 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogexp1.lastbuildstate
文件 1088 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogli
文件 3360 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogli
文件 366 2018-05-04 22:11 exp1exp1x64Debugexp1.tlogli
文件 240640 2018-05-04 22:11 exp1exp1x64Debugvc141.idb
文件 880640 2018-05-04 22:11 exp1exp1x64Debugvc141.pdb
文件 181353 2018-05-08 13:31 exp1exp1中值滤波后的图.jpg
文件 84018 2018-05-08 13:31 exp1exp1大津法与groundtruth做减法.jpg
文件 100958 2018-05-08 13:31 exp1exp1大津法二值图.jpg
文件 134571 2018-05-08 13:31 exp1exp1最大米粒.jpg
文件 268742 2018-05-08 13:31 exp1exp1灰度图.jpg
............此处省略23个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)