• 大小: 18.5MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-05
  • 语言: 其他
  • 标签: Opencv  VS  C++  

资源简介

对米粒图像处理的基础实验源代码+实验报告,包括米粒图像的读取,变换灰度图,Suan边缘检测,根据直方图进行阈值分割;根据分割结果,求米粒位置,重心,长度,面积等信息。 建议配置运行环境:OPENCV2.4.10+VS2010(其他版本也可以,需要自己调整)

资源截图

代码片段和文件信息

#include
#include
using namespace cv;
using namespace std;
#include   //ofstream类的头文件
#define BYTE unsigned char

//函数声明
void ReadImageRgbImageToGrayImage(Mat &inputImg Mat &grayImg);
void VisitContinueImgByPointer(Mat &inputImg Mat &dstImg);
Mat SusanFun(Mat img);
void DrowCenter(Mat inputImage);


//读取图像并变成灰度图
void ReadImageRgbImageToGrayImage(Mat &inputImg Mat &grayImg)
{
inputImg = cvLoadImage(“米粒4.png“);
if (inputImg.empty())//读取失败时
{
cout << “Could not open or find the image“ << std::endl;
}
//namedWindow(“原图“ WINDOW_AUTOSIZE); 
//resize(inputImg inputImg Size()0.250.25);//长宽都变为原来的0.5倍
    imshow(“原图“ inputImg);    
cvtColor(inputImg grayImg CV_RGB2GRAY);//把图片转化为灰度图
}

//访问像素
void VisitContinueImgByPointer(Mat &inputImg Mat &dstImg)
{
    dstImg = inputImg.clone();
    int rows = dstImg.rows;
    int cols = dstImg.cols;
    int channels = dstImg.channels();

    if(dstImg.isContinuous())
    {
        cols *= rows;
        rows = 1;
        //cout << “is continuous “ << endl;
    }

    for(int i = 0; i < rows; i++)
    {
        uchar* data = dstImg.ptr(i);
        for(int j = 0; j < cols * channels; j++)
        {
//ofstream mycout(“Q1.txt“);
    //mycout<            data[j] = 0;  //处理每一个像素
            //add code
        }
    } 
    //若存储连续,等效于以下代码
    //uchar* data = dstImg.data;
    //for(int i = 0; i < cols * rows * channels; i++)
    //    data[i] = 155;    //处理每一个像素

}
//susan算子
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;//数量 自适应阈值???? (不是全局阈值)
thresh=10;
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;
}

//图像的形态学处理:膨胀与腐蚀(主要是为了解决susan算子边缘检测结果出现断裂的问题)
Mat DilateAndErode(Mat &inputImg)
{
Mat out;
    //获取自定义核
Mat element = getStructuringElement(MORPH_RECT Size(3 3)); //第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-11 09:09  OPENCVTEST\
     目录           0  2018-12-26 20:51  OPENCVTEST\Debug\
     文件      127488  2018-12-26 20:51  OPENCVTEST\Debug\OPENCVTEST.exe
     文件      725764  2018-12-26 20:51  OPENCVTEST\Debug\OPENCVTEST.ilk
     文件     1641472  2018-12-26 20:51  OPENCVTEST\Debug\OPENCVTEST.pdb
     目录           0  2019-01-11 08:52  OPENCVTEST\ipch\
     目录           0  2019-01-11 08:52  OPENCVTEST\ipch\opencvtest-e1fb7881\
     文件    57868288  2019-01-11 08:52  OPENCVTEST\ipch\opencvtest-e1fb7881\opencvtest-296a8017.ipch
     目录           0  2018-12-19 11:23  OPENCVTEST\OPENCVTEST\
     文件       29720  2018-12-12 21:32  OPENCVTEST\OPENCVTEST\Center.tif
     目录           0  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\
     文件         548  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\Debug\cl.command.1.tlog
     文件       10654  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\Debug\CL.read.1.tlog
     文件         318  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\Debug\CL.write.1.tlog
     文件        3468  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\link.command.1.tlog
     文件        5638  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\link.read.1.tlog
     文件         570  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\link.write.1.tlog
     文件      502608  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\Debug\main.obj
     文件         672  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\mt.command.1.tlog
     文件         946  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\mt.read.1.tlog
     文件         376  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\mt.write.1.tlog
     文件        1020  2018-12-19 11:25  OPENCVTEST\OPENCVTEST\Debug\OPENCVTEST.Build.CppClean.log
     文件         381  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\OPENCVTEST.exe.intermediate.manifest
     文件          54  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\OPENCVTEST.lastbuildstate
     文件        2983  2018-12-26 20:51  OPENCVTEST\OPENCVTEST\Debug\OPENCVTEST.log
     文件         713  2018-12-19 11:55  OPENCVTEST\OPENCVTEST\Debug\OPENCVTEST.vcxprojResolveAssemblyReference.cache
     文件           0  2018-12-19 11:25  OPENCVTEST\OPENCVTEST\Debug\OPENCVTEST.write.1.tlog
     文件      478208  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\Debug\vc100.idb
     文件     1036288  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\Debug\vc100.pdb
     文件       12194  2018-12-26 11:03  OPENCVTEST\OPENCVTEST\main.cpp
     文件        8949  2018-12-19 20:09  OPENCVTEST\OPENCVTEST\OPENCVTEST.vcxproj
............此处省略63个文件信息

评论

共有 条评论