#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
今日推荐
周排行