• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            opencv中訪問像素點的方法


            * Indirect access: (General, but inefficient, access to any type image)
            效率低!
            o For a single-channel byte image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
            CvScalar s;
            s=cvGet2D(img,i,j); // get the (i,j) pixel value
            printf("intensity=%f/n",s.val[0]);
            s.val[0]=111;
            cvSet2D(img,i,j,s); // set the (i,j) pixel value

            o For a multi-channel float (or byte) image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
            CvScalar s;
            s=cvGet2D(img,i,j); // get the (i,j) pixel value
            printf("B=%f, G=%f, R=%f/n",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

            * Direct access: (Efficient access, but error prone)

            o For a single-channel byte image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
            ((uchar *)(img->imageData + i*img->widthStep))[j]=111;

            o For a multi-channel byte image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
            ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B
            ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G
            ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R

            o For a multi-channel float image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
            ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B
            ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G
            ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R

            * Direct access using a pointer: (Simplified and efficient access under limiting assumptions)

            o For a single-channel byte image:

            IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
            int height = img->height;
            int width = img->width;
            int step = img->widthStep/sizeof(uchar);
            uchar* data = (uchar *)img->imageData;
            data[i*step+j] = 111;

            o For a multi-channel byte image:

            IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
            int height = img->height;
            int width = img->width;
            int step = img->widthStep/sizeof(uchar);
            int channels = img->nChannels;
            uchar* data = (uchar *)img->imageData;
            data[i*step+j*channels+k] = 111;

            o For a multi-channel float image (assuming a 4-byte alignment):

            IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
            int height = img->height;
            int width = img->width;
            int step = img->widthStep/sizeof(float);
            int channels = img->nChannels;
            float * data = (float *)img->imageData;
            data[i*step+j*channels+k] = 111;

            * Direct access using a c++ wrapper: (Simple and efficient access)

            o Define a c++ wrapper for single-channel byte images, multi-channel byte images, and multi-channel float images:

            template<class T> class Image
            {
            private:
            IplImage* imgp;
            public:
            Image(IplImage* img=0) {imgp=img;}
            ~Image(){imgp=0;}
            void operator=(IplImage* img) {imgp=img;}
            inline T* operator[](const int rowIndx) {
            return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));}
            };

            typedef struct{
            unsigned char b,g,r;
            } RgbPixel;

            typedef struct{
            float b,g,r;
            } RgbPixelFloat;

            typedef Image<RgbPixel> RgbImage;
            typedef Image<RgbPixelFloat> RgbImageFloat;
            typedef Image<unsigned char> BwImage;
            typedef Image<float> BwImageFloat;

            o For a single-channel byte image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
            BwImage imgA(img);
            imgA[i][j] = 111;

            o For a multi-channel byte image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
            RgbImage imgA(img);
            imgA[i][j].b = 111;
            imgA[i][j].g = 111;
            imgA[i][j].r = 111;

            o For a multi-channel float image:

            IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
            RgbImageFloat imgA(img);
            imgA[i][j].b = 111;
            imgA[i][j].g = 111;
            imgA[i][j].r = 111;

            posted on 2012-07-16 15:56 abilitytao 閱讀(457) 評論(0)  編輯 收藏 引用

            亚洲综合久久久| 久久夜色精品国产欧美乱| 波多野结衣中文字幕久久| 久久99精品国产自在现线小黄鸭| 久久久噜噜噜久久| 久久亚洲精品国产精品婷婷| 狠狠久久综合| 亚洲av成人无码久久精品| 久久久久久久尹人综合网亚洲| 久久久久久国产精品美女| 亚洲欧美伊人久久综合一区二区 | 欧美午夜精品久久久久免费视 | 欧美粉嫩小泬久久久久久久| 久久久久国产一区二区 | 热RE99久久精品国产66热| 国产69精品久久久久9999APGF | 国产免费久久精品99久久| 久久精品国产亚洲AV不卡| 伊人久久大香线焦综合四虎| 久久久久久久久久久久久久| 亚洲国产精品久久电影欧美| 国产精品久久久久久福利69堂| 综合久久精品色| 久久se精品一区二区影院 | 精品久久久久久无码不卡| 97精品国产97久久久久久免费| 国产精品熟女福利久久AV| 一本久久精品一区二区| 久久er99热精品一区二区| 久久这里只精品99re66| 国内精品伊人久久久久AV影院| 久久久久久综合一区中文字幕| 久久综合精品国产一区二区三区| 久久精品国产乱子伦| 亚洲国产成人久久精品影视| 蜜桃麻豆www久久国产精品| 久久99热只有频精品8| 亚洲七七久久精品中文国产 | 99精品久久精品| 国产精品久久久久久久久久影院| 99精品久久精品一区二区|