📄 firstgreen.cpp
字号:
// Tuned for First GreenHouse// compile argument --> g++ -Wall -c "%f" `pkg-config --cflags --libs opencv`// Build Argument --> g++ -Wall "%f" `pkg-config --cflags --libs opencv`// Youhanna Parvizinejad #include <stdio.h>#include <stdlib.h>#include <cv.h>#include <cvaux.h>#include <highgui.h>int miny1=150; // Limit in vert pix for checking typedef unsigned char byte;typedef struct{byte B, G, R;} Sline;inline void* ScanLine(IplImage* img, int y){ return (img->imageData + img->widthStep * y);} void HSVhisto(IplImage* des, IplImage* inH, IplImage* inS, IplImage* inV, float Hmin, float Hmax, float Smin, float Smax, float Vmin, float Vmax){ byte *pD, *pH, *pS, *pV; for (int y = miny1; y < des->height; y++) { pD = (byte*)ScanLine(des, y); pH = (byte*)ScanLine(inH, y); pS = (byte*)ScanLine(inS, y); pV = (byte*)ScanLine(inV, y); for (int x = 0; x < des->width; x++) { float cH = (float)(pH[x]/255.0*360.0); float cS = (float)(pS[x]/255.0*100); float cV = (float)(pV[x]/255.0*100); if ( !((cH >= Hmin) && (cH <= Hmax) && (cS >= Smin) && (cS <= Smax) && (cV >= Vmin) && (cV <= Vmax))) { pD[x] = 0; } else pD[x] = 255; } } } int main(int argc, char** argv){ IplImage* img = cvLoadImage("5.jpg", 1); IplImage* hsv = cvCreateImage( cvGetSize(img), 8, 3 ); IplImage* h = cvCreateImage( cvGetSize(img), 8, 1 ); IplImage* s = cvCreateImage( cvGetSize(img), 8, 1 ); IplImage* v = cvCreateImage( cvGetSize(img), 8, 1 ); IplImage* des = cvCreateImage( cvGetSize(img), 8, 1 ); IplImage* cor = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 1); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* lines = 0; //cvSmooth(img, img, CV_GAUSSIAN, 3); cvCvtColor(img, hsv, CV_BGR2HSV); cvSplit(hsv, h, s, v, 0); cvEqualizeHist(h, h); cvEqualizeHist(s, s); cvEqualizeHist(v, v); HSVhisto(des, h, s, v, 140, 345, (float)0, (float)30, (float)55, (float)100);// Equalized histogram //cvErode(des, des, 0, 1); cvDilate(des, des, 0, 1); lines = cvHoughLines2( des, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 200, 100, 5); for(int i = 0; i < lines->total; i++ ) { CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i); cvLine( img, line[0], line[1], CV_RGB(255,0,0), 10, 8 ); } cvNamedWindow ("WinName", 1); cvShowImage("WinName", img); cvWaitKey(0); cvDestroyAllWindows(); cvReleaseImage(&img); cvReleaseImage(&hsv); cvReleaseImage(&h); cvReleaseImage(&s); cvReleaseImage(&v); cvReleaseImage(&des); cvReleaseImage(&cor); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -