|
@@ -0,0 +1,118 @@
|
|
|
+#include <iostream>
|
|
|
+#include <sstream>
|
|
|
+#include <vector>
|
|
|
+#include <opencv2/opencv.hpp>
|
|
|
+using namespace std;
|
|
|
+
|
|
|
+#define DATA_DIR "/home/vl/ali/data/256/"
|
|
|
+
|
|
|
+#define IM_ROWS 5106
|
|
|
+#define IM_COLS 15106
|
|
|
+#define ROI_SIZE 256
|
|
|
+struct UserData
|
|
|
+{
|
|
|
+ cv::Mat src;
|
|
|
+ vector<cv::Point> pts;
|
|
|
+};
|
|
|
+
|
|
|
+void on_mouse(int event,int x,int y,int flags,void *dp)
|
|
|
+{
|
|
|
+ UserData *d = (UserData *)dp;
|
|
|
+ if (event == CV_EVENT_LBUTTONDOWN)
|
|
|
+ {
|
|
|
+ d->pts.push_back(cv::Point(x,y));
|
|
|
+ }
|
|
|
+ if (event == CV_EVENT_RBUTTONDOWN)
|
|
|
+ {
|
|
|
+ if(d->pts.size()>0)
|
|
|
+ d->pts.pop_back();
|
|
|
+ }
|
|
|
+ cv::Mat temp=d->src.clone();
|
|
|
+ if(d->pts.size()>2)
|
|
|
+ {
|
|
|
+ const cv::Point* ppt[1] = { &d->pts[0] };
|
|
|
+ int npt[] = { static_cast<int>(d->pts.size()) };
|
|
|
+ cv::fillPoly(temp, ppt,npt,1,cv::Scalar( 0, 0, 255 ),16 );
|
|
|
+
|
|
|
+ }
|
|
|
+ for(int i=0;i<d->pts.size();i++)
|
|
|
+ {
|
|
|
+ cv::circle(temp,d->pts[i],1,cv::Scalar(0,0,255),1,16);
|
|
|
+ }
|
|
|
+ cv::circle(temp,cv::Point(x,y),1,cv::Scalar(0,255,0),1,16);
|
|
|
+ cv::imshow("img",temp);
|
|
|
+
|
|
|
+}
|
|
|
+int label_img(cv::Mat &src,cv::Mat &tiny,cv::Mat &cadaMask)
|
|
|
+{
|
|
|
+
|
|
|
+
|
|
|
+ char c='x';
|
|
|
+ cv::Mat cada=src.clone();
|
|
|
+ cv::namedWindow("cada",0);
|
|
|
+ cada.setTo(cv::Scalar(0,0,255),cadaMask);
|
|
|
+ cv::imshow("cada",cada);
|
|
|
+
|
|
|
+ cv::Mat m=src.clone();
|
|
|
+ cv::namedWindow("tiny",0);
|
|
|
+ m.setTo(cv::Scalar(0,0,255),tiny);
|
|
|
+ cv::imshow("tiny",m);
|
|
|
+ while(c!='n')
|
|
|
+ {
|
|
|
+
|
|
|
+ UserData d;
|
|
|
+ d.src = src.clone();
|
|
|
+
|
|
|
+ cv::namedWindow("img",0);
|
|
|
+ cv::setMouseCallback("img",on_mouse,&d);
|
|
|
+ cv::imshow("img",src);
|
|
|
+ c= cv::waitKey(0);
|
|
|
+ if(c=='a')
|
|
|
+ {
|
|
|
+ if(d.pts.size()>0)
|
|
|
+ {
|
|
|
+ const cv::Point* ppt[1] = { &d.pts[0] };
|
|
|
+ int npt[] = { static_cast<int>(d.pts.size()) };
|
|
|
+ cv::fillPoly(src, ppt,npt,1,cv::Scalar( 0, 0, 255 ),16 );
|
|
|
+ cv::fillPoly(tiny, ppt,npt,1,cv::Scalar(255),16 );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+int main()
|
|
|
+{
|
|
|
+ for(int i=0;i<IM_ROWS/ROI_SIZE+1;i++)
|
|
|
+ {
|
|
|
+ for(int j=0;j<IM_COLS/ROI_SIZE;j++)
|
|
|
+ {
|
|
|
+ stringstream ss1,ss2,ss3,ss4;
|
|
|
+
|
|
|
+ ss1<<DATA_DIR<<"2017/"<<i<<"_"<<j<<"_"<<ROI_SIZE<<"_.jpg";
|
|
|
+ ss2<<DATA_DIR<<"tiny/"<<i<<"_"<<j<<"_"<<ROI_SIZE<<"_.jpg";
|
|
|
+ ss3<<DATA_DIR<<"cada/"<<i<<"_"<<j<<"_"<<ROI_SIZE<<"_.jpg";
|
|
|
+ ss4<<DATA_DIR<<"mylabel/"<<i<<"_"<<j<<"_"<<ROI_SIZE<<"_.jpg";
|
|
|
+ cout<<ss1.str()<<endl;
|
|
|
+
|
|
|
+ cv::Mat src = cv::imread(ss1.str());
|
|
|
+ cv::Mat tiny = cv::imread(ss2.str(),0);
|
|
|
+ cv::Mat cada = cv::imread(ss3.str(),0);
|
|
|
+
|
|
|
+ cv::threshold(tiny,tiny,10,255,CV_THRESH_BINARY);
|
|
|
+ cv::threshold(cada,cada,10,255,CV_THRESH_BINARY);
|
|
|
+ double max1,min1,max2,min2;
|
|
|
+ cv::minMaxLoc(tiny,&min1,&max1);
|
|
|
+ cv::minMaxLoc(cada,&min2,&max2);
|
|
|
+ // if(max1>0|| max2>0)
|
|
|
+ {
|
|
|
+ cout<<"max1: "<<max1<<" max2: "<<max2<<endl;
|
|
|
+ label_img(src,tiny,cada);// label based on tiny
|
|
|
+ }
|
|
|
+
|
|
|
+ cv::imwrite(ss4.str(),tiny);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|