要求:
给出一幅米粒图数出图中米粒数目以及最大米粒位置。
在原图上画出最大米粒的位置。
使用otsu、迭代和平均灰度进行二值分割。
声明:
本次实验采用opencv版本为opencv1.0。
编程软件为vc6.
opencv1.0环境配置请访问http://blog.csdn.net/qq_32300341/article/details/70186379
#include "cv.h"
#include "highgui.h"
#include<stdio.h>
#include<iostream>
using namespace std;
int aver(IplImage *inputGrayImg)//平均灰度
{
uchar *data= (uchar *)inputGrayImg->imageData;
int wp = inputGrayImg->widthStep;
int i,j;
int sum=0;
for( i = 0; i < inputGrayImg->height; i++)
{
for(j = 0; j < inputGrayImg->width; j++)
{
sum = sum + data[i * wp + j];
}
}//获得所有灰度的和sum
return int(sum*1.0/(inputGrayImg->height*inputGrayImg->width)+0.5);
}
int diedai(IplImage *inputGrayImg,int a)
{
int threshold = 0;
int newThreshold = a;
while(threshold != newThreshold)
{
int p=1,q=1;
int sum1=0,sum2=0;
uchar *data= (uchar *)inputGrayImg->imageData;
int wp = inputGrayImg->widthStep;
int i,j;
for( i = 0; i < inputGrayImg->height; i++)
{
for(j = 0; j < inputGrayImg->width; j++)
{
if(data[i * wp + j]<newThreshold)
{
sum1+=data[i * wp + j];
p++;