Привет всем, я попытался использовать группировку kmeans для группировки объектов. Так что я могу использовать этот метод кластеризации для обнаружения объектов. Я получаю вывод, но проблема в том, что он слишком медленный {Как я могу это решить? }, и я получаю окно вывода, как показано в приведенной ниже ссылке. Вместо изображения отображаются три выходных изображения, как я могу это решить. Я не знаю, где именно лежит ошибка.Три изображения отображаются в окне вывода вместо одного
http://tinypic.com/view.php?pic=30bd7dc&s=8#.VgkSIPmqqko
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("Light.jpg", 0);
// imshow("fff",src);
// cvtColor(src,src,COLOR_BGR2GRAY);
Mat dst;
// pyrDown(src,src,Size(src.cols/2, src.rows/2),4);
// src=dst;
resize(src,src,Size(128,128),0,0,1);
Mat samples(src.rows * src.cols, 3, CV_32F);
for(int y = 0; y < src.rows; y++)
for(int x = 0; x < src.cols; x++)
// for(int z = 0; z < 3; z++)
samples.at<float>(y + x*src.rows) = src.at<uchar>(y,x);
cout<<"aaa"<<endl;
int clusterCount = 15;
Mat labels;
int attempts = 2;
Mat centers;
cout<<"aaa"<<endl;
kmeans(samples, clusterCount, labels, TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 10000, 0.0001), attempts, KMEANS_PP_CENTERS, centers);
Mat new_image(src.size(), src.type());
cout<<"aaa"<<endl;
for(int y = 0; y < src.rows; y++)
for(int x = 0; x < src.cols; x++)
{
int cluster_idx = labels.at<int>(y + x*src.rows,0);
new_image.at<uchar>(y,x) = centers.at<float>(cluster_idx,0);
//new_image.at<Vec3b>(y,x)[1] = centers.at<float>(cluster_idx, 1);
// new_image.at<Vec3b>(y,x)[2] = centers.at<float>(cluster_idx, 2);
}
imshow("clustered image", new_image);
waitKey(0);
}
не может видеть изображение в ссылке. пожалуйста обновите. – UmNyobe
Есть ли причина, по которой вы выбрали '(y + x * src.rows)' вместо '(y * src.cols + x)'? Порядок памяти - одна строка за другой. – Micka
вы можете загрузить «Light.jpg»? – Micka