⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iplimageprocess.cpp

📁 动态场景中运动目标检测提取与跟踪 对新手很有用
💻 CPP
字号:
#include "StdAfx.h"
#include "cv.h"
//给一个像素赋值,pixel 的长度必须与通道数相同
//目前本函数只支持 IPL_DEPTH_8U 三通道和单通道的图像
void iplSetPixelColor(IplImage* image, int x, int y, int* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U &&image->nChannels==3);
	
	
		image->imageData[y*image->widthStep+x*3+2]=(unsigned char)(*pixel);
		image->imageData[y*image->widthStep+x*3+1]=(unsigned char)(*(pixel+1));
		image->imageData[y*image->widthStep+x*3]=(unsigned char)(*(pixel+2));

}
void iplGetPixelColor(IplImage* image, int x, int y, int* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
		pixel[0]=(int)(unsigned char)(image->imageData[y*image->widthStep+x*3+2]);
		pixel[1]=(int)(unsigned char)(image->imageData[y*image->widthStep+x*3+1]);
		pixel[2]=(int)(unsigned char)(image->imageData[y*image->widthStep+x*3]);
	
}
void iplSetPixelColor(IplImage* image, int x, int y, int pixel)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U &&image->nChannels==3);

    int red=(pixel>>16) & 0xff;
	int green=(pixel>>8) & 0xff;
	int blue=(pixel) & 0xff;

	image->imageData[y*image->widthStep+x*3+2]=(char)(red);
	image->imageData[y*image->widthStep+x*3+1]=(char)(green);
	image->imageData[y*image->widthStep+x*3]=(char)(blue);
}
int iplGetPixelColor(IplImage* image, int x, int y)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
    
	int red=(int)(unsigned char)image->imageData[y*image->widthStep+x*3+2];
	int green=(int)(unsigned char)image->imageData[y*image->widthStep+x*3+1];
	int blue=(int)(unsigned char)image->imageData[y*image->widthStep+x*3];

	red = red & 0xFF;
	green = green & 0xFF;
	blue = blue & 0xFF;
	return ((255 << 24) | (red << 16) | (green << 8) | blue);	

}



void iplSetPixelGray(IplImage* image, int x, int y, int pixel)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U &&image->nChannels==1);
	image->imageData[y*image->widthStep+x]=(unsigned char)(pixel);
}

int iplGetPixelGray(IplImage* image, int x, int y)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==1);
	return ((int)(unsigned char)image->imageData[y*image->widthStep+x]);
}


void iplSetPixelRed(IplImage* image, int x, int y, int pixel)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	image->imageData[y*image->widthStep+x*3+2]=(unsigned char)pixel;
}
void iplSetPixelGreen(IplImage* image, int x, int y, int pixel)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	image->imageData[y*image->widthStep+x*3+1]=(unsigned char)pixel;

}
void iplSetPixelBlue(IplImage* image, int x, int y, int pixel)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	image->imageData[y*image->widthStep+x*3]=(unsigned char)pixel;
}

int iplGetPixelRed(IplImage* image, int x, int y)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	return (int)(unsigned char)(image->imageData[y*image->widthStep+x*3+2]);
}
int iplGetPixelGreen(IplImage* image, int x, int y)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	return (int)(unsigned char)(image->imageData[y*image->widthStep+x*3+1]);
}
int iplGetPixelBlue(IplImage* image, int x, int y)
{
	ASSERT(image!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	return (int)(unsigned char)(image->imageData[y*image->widthStep+x*3]);
}

void iplSetAllPixel(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U);
	switch(image->nChannels)
	{
	case 3:
		{
			for(int x=0;x<image->width;x++)
				for(int y=0;y<image->height;y++)
				{
					image->imageData[(y*image->widthStep)+x*3]=(char)pixel[(y*image->width+x)*3+2];
					image->imageData[(y*image->widthStep)+x*3+1]=(char)pixel[(y*image->width+x)*3+1];
					image->imageData[y*image->widthStep+x*3+2]=(char)pixel[(y*image->width+x)*3];
				}
			break;
		}
		
	case 1:
		{
			for(int x=0;x<image->width;x++)
			   for(int y=0;y<image->height;y++)
			   {
				   image->imageData[(y*image->widthStep+x)]=(char)pixel[(y*image->width+x)];				
			   }
			break;
		}
	default:
		AfxMessageBox(" the channel is wrong in iplSetAllPixel, check it!");
		break;
		
	}
	
}


void iplGetAllPixel(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U);
	switch(image->nChannels)
	{
	case 3:
		{
			for(int x=0;x<image->width;x++)
				for(int y=0;y<image->height;y++)
				{
					pixel[y*image->widthStep+x*3+2]=(unsigned char)image->imageData[(y*image->width+x)*3];
			 	    pixel[y*image->widthStep+x*3+1]=(unsigned char)image->imageData[(y*image->width+x)*3+1];
			    	pixel[y*image->widthStep+x*3]=(unsigned char)image->imageData[(y*image->width+x)*3+2];
				}
			break;
		}
	case 1:
		{
			for(int x=0;x<image->width;x++)
				for(int y=0;y<image->height;y++)
				{
					pixel[(y*image->width+x)]=(unsigned char)image->imageData[(y*image->width+x)];
					
				}
			break;
		}
		
	default:
		AfxMessageBox(" the channel is wrong in iplSetAllPixel, check it!");
		break;
		
	}
	
}
//对24位彩色图像处理
void iplSetAllPixelRed(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
		
	for(int x=0;x<image->width;x++)
		for(int y=0;y<image->height;y++)
		{
			image->imageData[(y*image->widthStep+x)*3+2]=(char)pixel[(y*image->width+x)];
		}
}

void iplSetAllPixelGreen(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	
	for(int x=0;x<image->width;x++)
		for(int y=0;y<image->height;y++)
		{
			image->imageData[(y*image->widthStep+x)*3+1]=(char)pixel[(y*image->width+x)];
		}
}
void iplSetAllPixelBlue(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	
	for(int x=0;x<image->width;x++)
		for(int y=0;y<image->height;y++)
		{
			image->imageData[(y*image->widthStep+x)*3]=(char)pixel[(y*image->width+x)];
		}
}

void iplGetAllPixelRed(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	
	for(int x=0;x<image->width;x++)
		for(int y=0;y<image->height;y++)
		{
			pixel[(y*image->width+x)]=(unsigned char)image->imageData[(y*image->widthStep+x)*3+2];
		}
}
void iplGetAllPixelGreen(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	
	for(int x=0;x<image->width;x++)
		for(int y=0;y<image->height;y++)
		{
			pixel[(y*image->width+x)]=(unsigned char)image->imageData[(y*image->widthStep+x)*3+1];
		}
}
void iplGetAllPixelBlue(IplImage* image, unsigned char* pixel)
{
	ASSERT(image!=NULL && pixel!=NULL && image->depth==IPL_DEPTH_8U && image->nChannels==3);
	
	for(int x=0;x<image->width;x++)
		for(int y=0;y<image->height;y++)
		{
			pixel[(y*image->width+x)]=(unsigned char)image->imageData[(y*image->widthStep+x)*3];
		}
}

int getRGB(int r,int g,int b)
{
	r = r & 0xFF;
	g = g & 0xFF;
	b = b & 0xFF;
	return ((255 << 24) | (r << 16) | (g << 8) | b);	

}

int getRedFromRGB(int rgb)
{
	return ((rgb>>16) & 0xff);
}
int getGreenFromRGB(int rgb)
{
	return ((rgb>>8) & 0xff);
}
int getBlueFromRGB(int rgb)
{
	return ((rgb) & 0xff);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -