七.使用OpenCv进行图像颜色识别

       接着上一篇的图像灰度处理后,接下来对灰度图像进行颜色识别,本人的方法比较简单,有其他好方法的可以提出来,大家共同进步。

目的:

将所有一副灰度图像中像素点灰度大于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;
}


这样处理后的图像相当于把灰度图像颜色加深一个层次,方便了后续的图像处理。


你可能感兴趣的:(opencv,像素,树莓派,图像处理,摄像头)