kmeans clustering convert code to python

asked 2017-03-03 12:30:57 -0600

Prototype gravatar image

I have the following code for k-means clustering , but it is in C++ . I need it in python. I was able to convert just the k-means clustering part into python. Can someone please convert the part where I access the labels and regenerate the image with just the colors into python as soon as possible. Thanks a lot in advance.

#include <opencv2/opencv.hpp> 

using namespace std;
using namespace cv;


void main(void)
{
    Mat img=imread("14780105241945453.png",IMREAD_COLOR);
    cout << "Pixels "<<img.rows*img.cols<<"\n";
    Mat src,srcF;
    cvtColor(img, src, CV_BGR2Lab);
    src.convertTo(srcF, CV_32FC3);
    cout << "Pixels " << srcF.rows*srcF.cols << "\n";
    vector<Vec3f> plan;
    plan.assign((Vec3f*)srcF.datastart, (Vec3f*)srcF.dataend);
    cout << "Pixels " << plan.size() << "\n";
    int clusterCount = 3;
    Mat labels;
    Mat centers;
    kmeans(plan, clusterCount,labels,TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 10, 1.0), 3, KMEANS_PP_CENTERS, centers);
    Mat mask;
    namedWindow("Original", WINDOW_NORMAL);
    imshow("Original", img);
int maxCluster=0,ind=-1;
for (int i = 0; i < clusterCount; i++)
{
    cv::Mat cloud = (labels == i) ;
    namedWindow(format("Cluster %d",i), WINDOW_NORMAL);
    Mat result = Mat::zeros(img.rows, img.cols, CV_8UC3);

    if (cloud.isContinuous())
        mask = cloud.reshape(0, img.rows);
    else
        cout << "error";
    int m=countNonZero(mask);
    if (m > maxCluster)
    {
        maxCluster = m;
        ind=i;
    }
    img.copyTo(result, mask);
    imshow(format("Cluster %d", i), result);
    imwrite(format("Cluster%d.png", i), result);

}
cout<<"Cluster max is "<<ind<<" with "<<maxCluster<<" pixels";
waitKey();
}

Please help me. Thanks a lot in advance and as soon as possible.

edit retag flag offensive close merge delete

Comments

May be you start translate this (or my) code in python and come back with a real problem?

LBerger gravatar imageLBerger ( 2017-03-03 14:01:35 -0600 )edit