开始没有将数组赋值为零,不能正常显示。代码如下:
Mat srcImage=imread("test.png"); imshow("C",srcImage); cvtColor(srcImage,srcImage,CV_RGB2GRAY); threshold(srcImage,srcImage,127,255,CV_THRESH_BINARY); //imshow("d",srcImage); int *colheight =new int[srcImage.cols]; memset(colheight,0,srcImage.cols*4); //数组必须赋初值为零,否则出错。无法遍历数组。 // memset(colheight,0,src->width*4); // CvScalar value; int value; for(int i=0;i<srcImage.rows;i++) for(int j=0;j<srcImage.cols;j++) { //value=cvGet2D(src,j,i); value=srcImage.at<uchar>(i,j); if(value==255) { colheight[j]++; //统计每列的白色像素点 } } /* for(int i=0;i<srcImage.cols;i++) { CString str; str.Format(TEXT("%d"),colheight[i]); MessageBox(str); } */ //srcImage.copyTo(histogramImage); Mat histogramImage(srcImage.rows,srcImage.cols,CV_8UC1); for(int i=0;i<srcImage.rows;i++) for(int j=0;j<srcImage.cols;j++) { value=0; //设置为黑色。 histogramImage.at<uchar>(i,j)=value; } imshow("d",histogramImage); for(int i=0;i<srcImage.cols;i++) for(int j=0;j<colheight[i];j++) { value=255; //设置为白色 histogramImage.at<uchar>(j,i)=value; } //imshow("C",srcImage); imshow("l",histogramImage);
参考资料:
图像水平方向的投影,http://blog.csdn.net/sxwup/article/details/21075251。