• <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 閱讀(466) 評論(0)  編輯 收藏 引用

            日韩人妻无码精品久久免费一 | 久久婷婷五月综合国产尤物app| 久久―日本道色综合久久| 久久精品国产久精国产| 九九久久精品国产| 狠狠综合久久AV一区二区三区| AV无码久久久久不卡蜜桃 | 欧美亚洲国产精品久久| 亚洲AV无码久久精品色欲| 伊人久久综在合线亚洲2019| 久久久亚洲裙底偷窥综合 | 久久国产香蕉视频| 久久久国产精品亚洲一区| 久久精品这里只有精99品| 久久国产精品成人影院| 欧美性大战久久久久久| 精品免费tv久久久久久久| 伊人久久精品无码av一区| 久久亚洲综合色一区二区三区| 久久乐国产综合亚洲精品| 久久AAAA片一区二区| 国产精品毛片久久久久久久| 亚洲愉拍99热成人精品热久久| 久久99热这里只有精品国产| 狠狠色丁香久久婷婷综| 男女久久久国产一区二区三区| 99久久综合国产精品免费| 久久久久久国产精品无码下载 | 欧美精品国产综合久久| 久久久久国产一区二区| 国产精品99久久精品爆乳| 国产一区二区三区久久| 久久国产免费观看精品3| 久久影院综合精品| 久久亚洲私人国产精品vA| 久久这里只有精品18| 99精品久久精品| 人人狠狠综合久久亚洲88| 精品无码久久久久久久久久| 久久亚洲综合色一区二区三区| 国内精品欧美久久精品|