三个调不出预期结果的小程序!来者有分!该怎么解决

三个调不出预期结果的小程序!来者有分!!
程序一:我想读入一幅图像,将它用Reshape函数处理成一列的数组后,再采用cvKMeans2函数进行聚类处理,处理完后再将clusters矩阵用Reshape函数变成原型,最后显示出图像。可是结果是显示出的是一幅全黑的图像。不知道为什么?
#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
#include"stdio.h"
#define MAX_CLUSTERS 2

int main(int argc,char** argv)
{
IplImage* img_ori=cvLoadImage("D:\\001.jpg",0);
CvMat* mat=cvCreateMat(img_ori->height,img_ori->width,CV_32FC1);
cvZero(mat);
cvConvert(img_ori,mat);
CvRNG rng=cvRNG(0xffffffff);

int cluster_count=cvRandInt(&rng)%MAX_CLUSTERS+1;//聚类数,它是随机产生的,上界是MAX_CLUSTERS
int N=img_ori->height*img_ori->width;
CvMat pointshdr,*points=cvReshape(mat,&pointshdr,1,N);
CvMat* clusters=cvCreateMat(N,1,CV_32SC1);

cvKMeans2(points,cluster_count,clusters,cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,10,1.0));
  CvMat dsthdr,*dst=cvReshape(clusters,&dsthdr,1,img_ori->height);  
cvNamedWindow("crystal",0);  
cvShowImage("crystal",dst);
cvWaitKey(0);
cvReleaseMat(&mat);
cvReleaseMat(&clusters);
cvDestroyWindow("crystal");
}

程序二:为什么我明明设定的是在坐标(0,39)处的值为最大值,但最显示的是坐标(39,0)呢?
#include"stdafx.h"
#include"cv.h"
#include"highgui.h"
#include"stdio.h"
void main()
{
IplImage* img=cvCreateImage(cvSize(100,100),IPL_DEPTH_64F,1);
cvZero(img);
cvSetReal2D(img,0,39,233);
double min,max;
CvPoint minLoc,maxLoc;
cvMinMaxLoc(img,&min,&max,&minLoc,&maxLoc);
printf("maxLoc=(%d,%d)\n",maxLoc.x,maxLoc.y);
}
程序三:最后得到的矩阵b中应该是一系列的0和1的组和,但是显示的结果却全部是0.为什么呢?#include"stdafx.h" 
#include <cv.h>
#include <highgui.h>
#include <stdio.h> 
#define k 2
void main()
{
IplImage* img=cvLoadImage("D:\\001.jpg",0);
double min,max;
CvPoint minPnt;
CvPoint maxPnt;
int N=img->height*img->width;
CvMat mathdr,*mat=cvReshape(img,&mathdr,1,1);//将mat变形成一行的,以便于处理
  CvMat* Mat=cvCreateMat(1,k,CV_64FC1);
  cvZero(Mat);
CvMat* tmp=cvCreateMat(1,k,CV_64FC1);
CvMat* b=cvCreateMat(k,N,CV_8SC1);
cvZero(b);
  //顺序从mat中取k个数赋给Mat
  for(int j=0;j<k;j++)
  cvSetReal1D(Mat,j,cvGetReal1D(mat,j));
  //将xj-mi的值存储在tmp矩阵中
  for(int j=0;j<N;j++)
  {
  cvZero(tmp);
  for(int i=0;i<k;i++)
  {
  cvSetReal1D(tmp,i,abs(cvGetReal1D(mat,j)-cvGetReal1D(Mat,i)));
  cvMinMaxLoc(tmp,&min,&max,&minPnt,&maxPnt,NULL);
  cvSetReal2D(b,minPnt.y,j,1);
  }
  }
  for(int i=0;i<k;i++)
  for(int j=0;j<10;j++)
  printf("%d ",cvGetReal2D(b,i,j));

}



------解决方案--------------------
这个我也不清楚,友情帮顶
------解决方案--------------------
不习惯看代码。帮顶
------解决方案--------------------
友情帮顶
------解决方案--------------------
菜鸟目前看不懂,只能友情帮顶了
------解决方案--------------------
关于第2个问题,cvSetReal2D(img,0,39,233);
设置的是图片矩阵的第1行第38列,当然是坐标(39,0)了
------解决方案--------------------
看看~
------解决方案--------------------
顶。。。。
------解决方案--------------------