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

            精品国产91久久久久久久a| 一本久久a久久精品vr综合| 久久九九亚洲精品| 伊人色综合久久天天人守人婷| 人妻无码αv中文字幕久久琪琪布| 亚洲天堂久久精品| 成人妇女免费播放久久久| 国产精品久久久久免费a∨| 天天久久狠狠色综合| 久久久国产精品| 精品国产乱码久久久久久浪潮| 久久久久九九精品影院| 欧美熟妇另类久久久久久不卡| 国产午夜电影久久| 人人狠狠综合久久88成人| 久久99精品免费一区二区 | 一本色道久久HEZYO无码| 久久国产精品成人免费| 狠狠色婷婷久久一区二区三区| 久久99精品久久久久久齐齐 | 亚洲国产精品无码久久久蜜芽| 天堂无码久久综合东京热| 国产真实乱对白精彩久久| 久久亚洲精品人成综合网| 亚洲伊人久久精品影院| 久久久久久国产a免费观看不卡| 精品久久久久久无码专区不卡| 2021国内精品久久久久久影院| 久久婷婷五月综合成人D啪| 久久久久久毛片免费看| 久久免费美女视频| 国内精品久久九九国产精品| 国产成年无码久久久久毛片| 久久精品国产亚洲77777| 伊人久久大香线蕉精品| 无码AV波多野结衣久久| 狠狠色婷婷久久综合频道日韩| 超级碰碰碰碰97久久久久| 理论片午午伦夜理片久久| 久久久精品国产Sm最大网站| 国产精品成人99久久久久 |