接着上一篇的图像灰度处理后,接下来对灰度图像进行颜色识别,本人的方法比较简单,有其他好方法的可以提出来,大家共同进步。
目的:
将所有一副灰度图像中像素点灰度大于128的变为白色(设置为255),小于的128的变为黑色(设置为0) 。
然后统计出黑白像素点的个数。
下面是代码:
#include <stdio.h>
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
int main(int argc, char* argv[])
{
CvScalar pixel;
int i = 0, j = 0;
int numw = 0, numb = 0;
if(argc != 2)
{
printf("Usage:./test xxx.jpg\n");
return 1;
}
IplImage* img = cvLoadImage(argv[1],
CV_LOAD_IMAGE_ANYCOLOR|CV_LOAD_IMAGE_ANYDEPTH);
if(NULL == img)
{
printf("Load Image Fail!\n");
return 2;
}
//访问图像每一个像素点
for(i=0; i<img->height; i++)
{
for(j=0; j<img->width; j++)
{
pixel = cvGet2D(img, i, j);
if(pixel.val[0] > 128)
{
pixel.val[0] = 255;//8位单通道图像在pixel.val[0]中存储像素
++numw;//统计白点个数
}
else
{
pixel.val[0] = 0;
++numb;//统计黑点个数
}
cvSet2D(img, i, j, pixel);
}
}
printf("Image Height:%d, Width:%d\n", img->height, img->width);
printf("White num:%d, Black num:%d\n", numw, numb);
cvSaveImage("Handle.jpg", img, 0);
cvReleaseImage(&img);
return 0;
}
这样处理后的图像相当于把灰度图像颜色加深一个层次,方便了后续的图像处理。