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

            国产成人精品久久综合| 综合久久一区二区三区 | 久久毛片免费看一区二区三区| 久久精品国产精品亚洲人人| 久久久久国产精品人妻| 狠狠色婷婷久久一区二区三区| 精品免费久久久久国产一区| 亚洲中文字幕久久精品无码喷水| 精品一区二区久久| 伊人久久精品无码av一区 | 久久久久亚洲AV成人网人人网站 | 久久人人爽人人爽人人片av麻烦| 九九精品99久久久香蕉| 伊人色综合久久天天人守人婷| av午夜福利一片免费看久久| 99久久这里只精品国产免费| 国产AⅤ精品一区二区三区久久| 狼狼综合久久久久综合网| 日本精品一区二区久久久| 久久精品视频免费| 国内精品人妻无码久久久影院 | 国产亚洲精品久久久久秋霞| 久久99精品国产麻豆蜜芽| 国产成人精品白浆久久69| 亚洲午夜久久久影院伊人| 色狠狠久久综合网| 亚洲欧美另类日本久久国产真实乱对白 | 怡红院日本一道日本久久| 久久久久人妻一区二区三区| 久久久久国产| 久久综合综合久久97色| 久久丫精品国产亚洲av不卡 | 久久精品国产精品青草| 国产午夜精品久久久久免费视 | 2020久久精品国产免费| 久久精品中文字幕无码绿巨人| 亚洲国产精品无码成人片久久| 波多野结衣AV无码久久一区| 久久WWW免费人成一看片| 亚洲va久久久噜噜噜久久男同| 亚洲国产精品无码久久98|