您的位置:首页 > 运维架构

OpenCV中获取图像某一像素值

2008-04-22 21:48 471 查看
This is a basic example for the OpenCV.

First we must know the structure of IplImage:

IPL image:
IplImage
|-- int  nChannels;     // Number of color channels (1,2,3,4)
|-- int  depth;         // Pixel depth in bits:
|                       //   IPL_DEPTH_8U, IPL_DEPTH_8S,
|                       //   IPL_DEPTH_16U,IPL_DEPTH_16S,
|                       //   IPL_DEPTH_32S,IPL_DEPTH_32F,
|                       //   IPL_DEPTH_64F
|-- int  width;         // image width in pixels
|-- int  height;        // image height in pixels
|-- char* imageData;    // pointer to aligned image data
|                       // Note that color images are stored in BGR order
|-- int  dataOrder;     // 0 - interleaved color channels,
|                       // 1 - separate color channels
|                       // cvCreateImage can only create interleaved images
|-- int  origin;        // 0 - top-left origin,
|                       // 1 - bottom-left origin (Windows bitmaps style)
|-- int  widthStep;     // size of aligned image row in bytes
|-- int  imageSize;     // image data size in bytes = height*widthStep
|-- struct _IplROI *roi;// image ROI. when not NULL specifies image
|                       // region  to be processed.
|-- char *imageDataOrigin; // pointer to the unaligned origin of image data
|                          // (needed for correct image deallocation)
|
|-- int  align;         // Alignment of image rows: 4 or 8 byte alignment
|                       // OpenCV ignores this and uses widthStep instead
|-- char colorModel[4]; // Color model - ignored by OpenCV
//------------------------------------------------------------------------------



int main(int argc, char* argv[])




...{ 




    IplImage *img=cvLoadImage("c://fruitfs.bmp",1);


    CvScalar s;




    for(int i=0;i<img->height;i++)...{




        for(int j=0;j<img->width;j++)...{


        s=cvGet2D(img,i,j); // get the (i,j) pixel value


        printf("B=%f, G=%f, R=%f ",s.val[0],s.val[1],s.val[2]);


        s.val[0]=111;


        s.val[1]=111;


        s.val[2]=111;


        cvSet2D(img,i,j,s);//set the (i,j) pixel value


        }


    }


    cvNamedWindow("Image",1); 




    cvShowImage("Image",img);


    cvWaitKey(0); //等待按键 




    cvDestroyWindow( "Image" );//销毁窗口


    cvReleaseImage( &img ); //释放图像 




    return 0;







 





 其实还有更好的方法,例如将其封装成类,调用起来更加方便,效率也很高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息