开始没有将数组赋值为零,不能正常显示。代码如下:
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);