cityscape分割3类别数据处理

cpp:

#include "cv.h"  
#include "highgui.h"  
#include <iostream>
#include <fstream>
#include <string.h>

   
using namespace std;  
using namespace cv;  
   
int main()  
{  
    ifstream infile;
    infile.open("/media/hdc/xing/DeepLabV2/dataset/cityspace/gtFine/gtFine_color.txt");
    string tmp;
    while(getline(infile,tmp)){

        string name = tmp.substr(2);
        // cout << name << endl; 
        string gt_dir = "/media/hdc/xing/DeepLabV2/dataset/cityspace/gtFine/" + name;
        string dis_dir = "/home/bnrc/cityscape_123label/" + name; 
        // cout << gt_dir << endl;
        // cout << dis_dir << endl;
        
        Mat img;      
        img = imread(gt_dir); 
        int col = img.cols;
        int row = img.rows;
        // cout << col << endl;
        // cout << row << endl;
        //Mat result(1024, 2048, CV_8UC1, Scalar(255));
        Mat result(1024, 2048, CV_8UC1, Scalar(0));
        for(int i = 0;i < col;i++){
            int index = 1024;
            int blue = img.at<Vec3b>(index-1,i)[0];
            int green = img.at<Vec3b>(index-1,i)[1];
            int red = img.at<Vec3b>(index-1,i)[2];
            while(index && (blue != 128 || green != 64 || red != 128 )){
                index--;
                blue = img.at<Vec3b>(index-1,i)[0];
                green = img.at<Vec3b>(index-1,i)[1];
                red = img.at<Vec3b>(index-1,i)[2];
            }
            while(index && blue == 128 && green == 64 && red == 128){
                // result.at<uchar>(index-1,i) = 0;
                result.at<uchar>(index-1,i) = 1;
                index--;
                blue = img.at<Vec3b>(index-1,i)[0];
                green = img.at<Vec3b>(index-1,i)[1];
                red = img.at<Vec3b>(index-1,i)[2];
            }
            int blue1 = blue;
            int green1 = green;
            int red1 = red; 
            while(index && blue == blue1 && green == green1 && red == red1){
                // result.at<uchar>(index-1,i) = 150;
                result.at<uchar>(index-1,i) = 2;
                index--;
                blue = img.at<Vec3b>(index-1,i)[0];
                green = img.at<Vec3b>(index-1,i)[1];
                red = img.at<Vec3b>(index-1,i)[2];
            }
            while(index && (blue != 128 || green != 64 || red != 128 )){
                index--;
                blue = img.at<Vec3b>(index-1,i)[0];
                green = img.at<Vec3b>(index-1,i)[1];
                red = img.at<Vec3b>(index-1,i)[2];
            }
            while(index && blue == 128 && green == 64 && red == 128){
                // result.at<uchar>(index-1,i) = 0;
                result.at<uchar>(index-1,i) = 1;
                index--;
                blue = img.at<Vec3b>(index-1,i)[0];
                green = img.at<Vec3b>(index-1,i)[1];
                red = img.at<Vec3b>(index-1,i)[2];
            }
            int blue2 = blue;
            int green2 = green;
            int red2 = red; 
            while(index && blue == blue2 && green == green2 && red == red2){
                // result.at<uchar>(index-1,i) = 150;
                result.at<uchar>(index-1,i) = 2;
                index--;
                blue = img.at<Vec3b>(index-1,i)[0];
                green = img.at<Vec3b>(index-1,i)[1];
                red = img.at<Vec3b>(index-1,i)[2];
            }
        }
        // delete car flag
        for(int i = 0;i < col;i++){
            for(int j = 0;j < row;j++){
                int blue = img.at<Vec3b>(j,i)[0];
                int green = img.at<Vec3b>(j,i)[1];
                int red = img.at<Vec3b>(j,i)[2];
                // cout << blue << " " << green << " " << red << ":" << i << " " << j << endl;
                if(blue == 0 && green == 0 && red == 0){
                    // result.at<uchar>(j,i) = 255;
                    result.at<uchar>(j,i) = 0;
                }
            }
        }
        imwrite(dis_dir,result);
    }



    //method 2

    /*string gt_dir = "/media/hdc/xing/DeepLabV2/dataset/cityspace/gtFine/aachen/aachen_000001_000019_gtFine_color.png";
    // size_t pos = tmp.find("/");
    // string str = tmp.substr(0,pos);
    // cout << str << endl;
    string dis_dir = "/home/bnrc/aachen_000007_000019_gtFine_color.png"; 
    // cout << gt_dir << endl;
    // cout << dis_dir << endl;
    Mat img;      
    img = imread(gt_dir); 
    int col = img.cols;
    int row = img.rows;
    // cout << col << endl;
    // cout << row << endl;
    Mat result(1024, 2048, CV_8UC1, Scalar(255));
    for(int i = 0;i < col;i++){
        int index = 1024;
        int blue = img.at<Vec3b>(index-1,i)[0];
        int green = img.at<Vec3b>(index-1,i)[1];
        int red = img.at<Vec3b>(index-1,i)[2];
        while(index && (blue != 128 || green != 64 || red != 128 )){
            index--;
            blue = img.at<Vec3b>(index-1,i)[0];
            green = img.at<Vec3b>(index-1,i)[1];
            red = img.at<Vec3b>(index-1,i)[2];
        }
        while(index && blue == 128 && green == 64 && red == 128){
            result.at<uchar>(index-1,i) = 0;
            index--;
            blue = img.at<Vec3b>(index-1,i)[0];
            green = img.at<Vec3b>(index-1,i)[1];
            red = img.at<Vec3b>(index-1,i)[2];
        }
        int blue1 = blue;
        int green1 = green;
        int red1 = red; 
        while(index && blue == blue1 && green == green1 && red == red1){
            result.at<uchar>(index-1,i) = 150;
            index--;
            blue = img.at<Vec3b>(index-1,i)[0];
            green = img.at<Vec3b>(index-1,i)[1];
            red = img.at<Vec3b>(index-1,i)[2];
        }
        while(index && (blue != 128 || green != 64 || red != 128 )){
            index--;
            blue = img.at<Vec3b>(index-1,i)[0];
            green = img.at<Vec3b>(index-1,i)[1];
            red = img.at<Vec3b>(index-1,i)[2];
        }
        while(index && blue == 128 && green == 64 && red == 128){
            result.at<uchar>(index-1,i) = 0;
            index--;
            blue = img.at<Vec3b>(index-1,i)[0];
            green = img.at<Vec3b>(index-1,i)[1];
            red = img.at<Vec3b>(index-1,i)[2];
        }
        int blue2 = blue;
        int green2 = green;
        int red2 = red; 
        while(index && blue == blue2 && green == green2 && red == red2){
            result.at<uchar>(index-1,i) = 150;
            index--;
            blue = img.at<Vec3b>(index-1,i)[0];
            green = img.at<Vec3b>(index-1,i)[1];
            red = img.at<Vec3b>(index-1,i)[2];
        }
    }
    imwrite(dis_dir,result);
    */



    //method 1

    /*ifstream infile;
    string gt_dir = "/media/hdc/xing/DeepLabV2/dataset/cityspace/gtFine/aachen/aachen_000007_000019_gtFine_labelIds.png";
    string dis_dir = "/home/bnrc/aachen_000001_000019_gtFine_labelIds.png";
    Mat img;
    img = imread(gt_dir);
    int col = img.cols;
    int row = img.rows;
    cout << col << endl;
    cout << row << endl;
    Mat result(1024, 2048, CV_8UC1, Scalar(255));
    for(int i = 0;i < col;i++){
        int index = 1024;
        int label = img.at<uchar>(index-1,i);
        // cout << label << endl;
        while(index && label != 7){
            index--;
            label = img.at<uchar>(index-1,i);
            // cout << label << endl;
        }
        // cout << label << endl;
        while(index && label == 7){
            result.at<uchar>(index-1,i) = 0;
            index--;
            label = img.at<uchar>(index-1,i);
            // cout << index << ' ' <<label << endl;
        }
        // int value = label;
        // while(index && label == value){
        //     result.at<uchar>(index-1,i) = 150;
        //     index--;
        //     label = img.at<uchar>(index-1,i);
        //     // cout << label << endl;
        // }    
    }
    imwrite(dis_dir,result);*/
    return 0;  
}  

python:

import cv2
import numpy as np




with open('/media/hdc/xing/data_semantics/training/semantic_rgb/a.txt','r') as file:
    # num = 0
    for line in file:
        # if num == 1:
            # break
        # num += 1
        gt_image = '/media/hdc/xing/data_semantics/training/semantic_rgb/' + line.strip().split('./')[1]
        # print gt_image
        save_dir = '/media/hdc/xing/data_semantics/training/label012/' + line.strip().split('./')[1]
        img_gt = cv2.imread(gt_image)
        # print type(img_gt)
        height = img_gt.shape[0]
        width = img_gt.shape[1]
        # print width,height
        result = np.zeros((height,width))
        for i in range(width):
            index = height-1
            red,green,blue = img_gt[index,i]
            # print i,red,green,blue
            while index >= 1 and (red != 128 or green != 64 or blue != 128):
                index -= 1
                red,green,blue = img_gt[index,i]
            while index >= 1 and red == 128 and green == 64 and blue == 128:
                index -= 1
                result[index][i] = 1
                # result[index][i] = 255
                red,green,blue = img_gt[index,i]
            while (index >= 1 and red == 232 and green == 35 and blue == 244) or (index >= 1 and red == 152 and green == 251 and blue == 152) or (index >= 1 and red == 160 and green == 170 and blue == 250) or (index >= 1 and red == 81 and green == 0 and blue == 81):
                index -= 1
                red,green,blue = img_gt[index,i]
            while index >= 1 and red == 128 and green == 64 and blue == 128:
                index -= 1
                result[index][i] = 1
                # result[index][i] = 255
                red,green,blue = img_gt[index,i]
            blue1 = blue
            green1 = green
            red1 = red
            # print blue1,green1,red1
            while index >= 1 and blue == blue1 and green == green1 and red == red1:
                result[index][i] = 2
                # result[index][i] = 150
                index -= 1
                red,green,blue = img_gt[index,i]
            while index >= 1 and red == 128 and green == 64 and blue == 128:
                index -= 1
                result[index][i] = 1
                # result[index][i] = 255
                red,green,blue = img_gt[index,i]
            while index >= 1 and blue == blue1 and green == green1 and red == red1:
                result[index][i] = 2
                # result[index][i] = 150
                index -= 1
                red,green,blue = img_gt[index,i]
            # while index >= 1 and (red != 128 or green != 64 or blue != 128):
            #     index -= 1
            #     red,green,blue = img_gt[index,i]
            # while index >= 1 and red == 128 and green == 64 and blue == 128:
            #     index -= 1
            #     # result[index][i] = 1
            #     result[index][i] = 255
            #     red,green,blue = img_gt[index,i]
            # while index >= 1 and red == 250 and green == 170 and blue == 160:
            #     index -= 1
            #     red,green,blue = img_gt[index,i]
            # while index >= 1 and red == 244 and green == 35 and blue == 232:
            #     index -= 1
            #     red,green,blue = img_gt[index,i]
            # while index >= 1 and red == 152 and green == 251 and blue == 152:
            #     index -= 1
            #     red,green,blue = img_gt[index,i]
            # blue2 = blue
            # green2 = green
            # red2 = red
            # while index >= 1 and blue == blue2 and green == green2 and red == red2:
            #     index -= 1
            #     # result[index][i] = 2
            #     result[index][i] = 150
            #     red,green,blue = img_gt[index,i]
            # print index
        for i in range(width):
            for j in range(height):
                red,green,blue = img_gt[j,i]
                if blue == 0 and green == 0 and red == 0:
                    result[j][i] = 0
        cv2.imwrite(save_dir,result)
        print save_dir
原文地址:https://www.cnblogs.com/ymjyqsx/p/9160217.html