实验主程序

#include <iostream>
#include <opencv2/opencv.hpp>
#include <math.h>
#include "cvaux.h"
#include <fstream>
#include <string>
#include "GLCM.h"<span style="color:#009900;">
using namespace std;
using namespace cv;
Mat src1;
Mat draw_image;
int numb = 0;//the number in one classify
int image_num = 1;
int main (int argc , char **argv)
{
	//文件读取
	string ImgName;
	ifstream fin("filename.txt");
	ofstream myfile;
	myfile.open("shuidao2.csv");// Input file
	myfile << ",BAVG,GAVG,RAVG,HAVG,SAVG,VAVG,energy,entropy,contrast,idMoment,hzbi,area,perimeter,width,height,circile\n";
	while (getline(fin, ImgName))
	{
		ImgName = "E:\\save_img\\" + ImgName;
		src1 = imread(ImgName);//读取图片  
		//src1 = imread("E:/picture/shuidao2.jpg");
		if (!src1.data)
		{
			cout << "Can not find the image" << endl;
		}
		imshow("Input image", src1);
		Mat blur_img;//没用
		GaussianBlur(src1, blur_img, Size(3, 3), 3, 3);
		Mat bin_img;
		Mat gray_img;
		cvtColor(src1, gray_img, COLOR_BGR2GRAY);
		threshold(gray_img, bin_img, 0, 225, THRESH_BINARY_INV | THRESH_TRIANGLE);
		Mat morph_img;
		Mat kernerl = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
		morphologyEx(bin_img, morph_img, MORPH_OPEN, kernerl, Point(-1, -1));
		imshow("bin image", bin_img);
		//imshow("Morph image", morph_img);
		//Mat draw_image;
		cvtColor(morph_img, draw_image, COLOR_GRAY2BGR);
		Rect ROI;
		vector<vector<Point>> contours;
		vector<Vec4i> hiearachy;
		findContours(morph_img, contours, hiearachy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
		cout << "图中一共有" << contours.size() << "个水稻样本" << endl;
		//ofstream myfile;
		//myfile.open("shuidao2.csv");// Input file
		//myfile << ",BAVG,GAVG,RAVG,HAVG,SAVG,VAVG,energy,entropy,contrast,idMoment,hzbi,area,perimeter,width,height,circile\n";


		for (int t = 0; t < contours.size(); t++)
		{
			drawContours(draw_image, contours, t, Scalar(0, 255, 0), 2, LINE_AA);
			Rect minrect = boundingRect(contours[t]);
			Point2f pts[4];
			ROI = minrect;
			float hzbi;
			hzbi = float(minrect.height) / float(minrect.width);
			float area = contourArea(contours[t]);
			float perimeter = arcLength(contours[t], true);
			float heit = float(minrect.height);
			float wih = float(minrect.width);
			// min circle
			Point2f center;
			float radius;
			minEnclosingCircle(contours[t], center, radius);
			float circle_area, circle_result;
			circle_area = CV_PI * radius*radius;
			circle_result = area / circle_area;



			//计算每个roi区域的BGR
			Mat roi_img = src1(minrect);
			imshow("result", roi_img);

			//bgr avage
			//CvMat cvmat = roi_img;
			IplImage roi_imgI = roi_img;
			CvScalar cs = cvAvg(&roi_imgI, NULL);
			cout << t << "号水稻B通道均值: " << cs.val[0] << endl;
			cout << t << "号水稻G通道均值: " << cs.val[1] << endl;
			cout << t << "号水稻R通道均值: " << cs.val[2] << endl;


			//hsv avge;
			Mat roi_hsi;
			cvtColor(roi_img, roi_hsi, COLOR_BGR2HSV);
			IplImage roi_hsiI = roi_hsi;
			CvScalar cs2 = cvAvg(&roi_hsiI, NULL);
			cout << t << "号水稻H通道均值: " << cs2.val[0] << endl;
			cout << t << "号水稻S通道均值: " << cs2.val[1] << endl;
			cout << t << "号水稻V通道均值: " << cs2.val[2] << endl;

			//计算每个ROI的纹理
			Mat gray_roi;
			cvtColor(roi_img, gray_roi, COLOR_BGR2GRAY);
			IplImage gray_roiI = gray_roi;
			//IplImage* img = cvLoadImage("E:/picture/shuidao2.jpg", 0);
			IplImage* img = &gray_roiI;
			GLCM glcm;
			VecGLCM vec;
			GLCMFeatures features;
			glcm.initGLCM(vec);
			// 水平
			glcm.calGLCM(img, vec, GLCM::GLCM_HORIZATION);
			glcm.getGLCMFeatures(vec, features);
			// 垂直
			glcm.calGLCM(img, vec, GLCM::GLCM_VERTICAL);
			glcm.getGLCMFeatures(vec, features);
			// 45 度
			glcm.calGLCM(img, vec, GLCM::GLCM_ANGLE45);
			glcm.getGLCMFeatures(vec, features);
			// 135 度
			glcm.calGLCM(img, vec, GLCM::GLCM_ANGLE135);
			glcm.getGLCMFeatures(vec, features);

			cout << "energy :   " << features.energy << endl;
			cout << "entropy:   " << features.entropy << endl;
			cout << "contrast:  " << features.contrast << endl;
			cout << "idMoment:  " << features.idMoment << endl;


			//
			cout << t << "号水稻的横纵比: " << hzbi << endl;
			cout << t << "号水稻的面积:   " << area << endl;
			cout << t << "号水稻的周长:   " << perimeter << endl;
			cout << t << "号水稻的宽度:   " << wih << endl;
			cout << t << "号水稻的长度:   " << heit << endl;
			cout << t << "号水稻的圆度:   " << circle_result << endl;
			cout << endl;
			cout << endl;

			int sum = 0;
			 sum = 9 * numb+t;

			//文件写入
			myfile <<"A种" << sum << "号" << "," << cs.val[0] << "," << cs.val[1] << "," << cs.val[2] << "," << cs2.val[0] << "," << cs2.val[1] << "," << cs2.val[2] << ",";
			myfile << features.energy << "," << features.entropy << "," << features.contrast << "," << features.idMoment << ",";
			myfile << hzbi << "," << area << "," << perimeter << "," << wih << ",";
			myfile << heit << "," << circle_result << ",\n";

		}
		if (numb < 6)
			numb++;
		
	}
	

	myfile.close();
	imshow("Output image", draw_image);
	waitKey(0);
	return 0;

}

猜你喜欢

转载自blog.csdn.net/xiexu911/article/details/79113402