📄 iplimageprocess.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 + -