• <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

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

            opencv中訪問(wèn)像素點(diǎn)的方法


            * 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) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            亚洲欧美一级久久精品| 国产成人精品免费久久久久| 午夜精品久久久内射近拍高清| 四虎久久影院| 久久99热只有频精品8| 久久久久九国产精品| 久久免费的精品国产V∧| 狠狠色综合久久久久尤物| 伊人久久大香线蕉亚洲五月天| 久久99毛片免费观看不卡| 亚洲欧美另类日本久久国产真实乱对白| 97久久国产露脸精品国产| 久久99精品国产麻豆不卡| 久久久久亚洲Av无码专| 亚洲一区精品伊人久久伊人 | 久久这里只有精品视频99| 久久婷婷五月综合97色直播| 久久国产精品-国产精品| 亚洲精品tv久久久久久久久| 伊人久久成人成综合网222| 久久亚洲精品视频| 69久久精品无码一区二区| 中文字幕人妻色偷偷久久| 无码人妻少妇久久中文字幕 | 久久精品国产男包| 精品人妻伦一二三区久久| 色综合久久最新中文字幕| 久久精品国产亚洲欧美| 色88久久久久高潮综合影院| 久久亚洲中文字幕精品一区| 亚洲精品99久久久久中文字幕| 99久久精品国产毛片| 国产精品欧美亚洲韩国日本久久| 93精91精品国产综合久久香蕉| 久久精品无码午夜福利理论片| 午夜久久久久久禁播电影| 热re99久久精品国99热| 国内精品久久人妻互换| 精品一区二区久久| 激情久久久久久久久久| 久久人人爽人人澡人人高潮AV|