Browse Source

切割图片并标注

liuyuqi-dellpc 8 years ago
parent
commit
685d7b80f0
3 changed files with 132 additions and 1 deletions
  1. 2 1
      README.md
  2. 118 0
      src/VS/labelData.cpp
  3. 12 0
      src/python/cut_roi.py

+ 2 - 1
README.md

@@ -4,7 +4,7 @@
 
 应用创新赛以“数字城市”为主题,聚焦政务数据创新应用、政务数据跨界融合、政务资源整合共享三大方向。选题方向包括但不限于城市交通、教育、医疗、生活与宜居、社交网络,同时参赛队伍也可自选课题参赛。参赛作品分为数据分析类和应用场景类。要求参赛队伍分析挖掘对城市中各种公共数据之间的价值,并以可视化的方式进行展现。
 
-
+---
 ## 项目介绍
 
 * 项目结构
@@ -16,5 +16,6 @@ src/python
 * 相关文档
 
 本文博客:[广东政务比赛](http://blog.yoqi.me)
+
 项目地址:[gdzw-analysis](http://git.yoqi.me:3000/lyq/gdzw-analysis)
 

+ 118 - 0
src/VS/labelData.cpp

@@ -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;
+}

+ 12 - 0
src/python/cut_roi.py

@@ -0,0 +1,12 @@
+# 切割图像
+
+img_size = 256 # 15106/ 256 =59...2  5106/256=19..284
+
+for i in range(len(im_2015)/img_size + 1 ): # last 284
+    for j in range(len(im_2015[0])/img_size ): #last 2 too small, drop one
+        im_name = str(i)+'_'+str(j)+'_'+str(img_size)+'_.jpg'
+        cv2.imwrite("2017/"+im_name,scale_percentile(im_2017[i*img_size:i*img_size+img_size, j*img_size:j*img_size+img_size, :3])*255)
+        cv2.imwrite("2015/"+im_name,scale_percentile(im_2015[i*img_size:i*img_size+img_size, j*img_size:j*img_size+img_size, :3])*255)
+        cv2.imwrite("cada/"+im_name,im_cada[i*img_size:i*img_size+img_size, j*img_size:j*img_size+img_size]*255)
+        cv2.imwrite("tiny/"+im_name,im_tiny[i*img_size:i*img_size+img_size, j*img_size:j*img_size+img_size]*255)
+