首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

opencv怎的给像素赋值

2012-12-16 
opencv怎样给像素赋值?uchar *pix;然后遍历每行每列pix(uchar*)(pFrImg22-imageData + pFrImg22-widthS

opencv怎样给像素赋值?
uchar *pix;
然后遍历每行每列
pix=(uchar*)(pFrImg22->imageData + pFrImg22->widthStep*j+i); 
pix(i,j)=255这样写为什么不对?应该怎样写?
谢谢
[最优解释]
用下面的方法进行读取。相信,写入你就会了吧?
int width = img.width;
int height = img.height;
int step = img.widthStep;
int channels = img.nchannels;
uchar *data = (uchar*)img.imagedata;
int r,g,b;

for(int i=0; i<height; i++)
{
   for(int j=0; j<width; j++)
   {
      b = data[i*step+j*channels];
      g = data[i*step+j*channels+1];
      r = data[i*step+j*channels+2];
   }
}
[其他解释]

引用:
uchar *pix;
然后遍历每行每列
pix=(uchar*)(pFrImg22->imageData + pFrImg22->widthStep*j+i); 
pix(i,j)=255这样写为什么不对?应该怎样写?
谢谢


pix是指针啊,那pix(i,j)是怎么一回事呢?


 对于单通道字节型图像: 

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

    对于多通道字节型图像: 

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

    对于多通道浮点型图像: 

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

[其他解释]
http://blog.csdn.net/fengbingchun/article/details/6408293
[其他解释]
引用:
uchar *pix;
然后遍历每行每列
pix=(uchar*)(pFrImg22->imageData + pFrImg22->widthStep*j+i); 
pix(i,j)=255这样写为什么不对?应该怎样写?
谢谢


pix(i,j)你自己定义的指针能这么用? 你想写pix[i,j]吧。。
int lLineBytes = img.widthStep;
 for (i =0; i < (img.height-1); i++)
     {
 for (int j = 0; j < (img.width-1); j++)
         {
            unsigned char* cn =(unsigned char*)(img.imageData+lLineBytes*i+j);
            int temp = (*cn);
    if(temp>255)
       *cn =255;
    if(temp<0)
       *cn = 0;
         }


       }
[其他解释]

引用:
引用:
uchar *pix;
然后遍历每行每列
pix=(uchar*)(pFrImg22->imageData + pFrImg22->widthStep*j+i);
pix(i,j)=255这样写为什么不对?应该怎样写?
谢谢


pix是指针啊,那pix(i,j)是怎么一回事呢?


 对于单通道字节型图像: 

IplImag……

那个是第i行j列的像素,我后来吧像素定义成整型的二维数组 也是用上述方法得到像素值 给像素赋值之后像素值没变 别人说是因为吧像素取出来 给取出来的赋值了 原本的像素并没有变 那怎样才能让原有的像素值变呢
[其他解释]
引用:
http://blog.csdn.net/fengbingchun/article/details/6408293

谢谢您给我的网址 我已经运行成功了 可是太慢
我改成pixel=(uchar*)(img->imageData +img->widthStep*j+i);
出现以下错误  error C2679: 二进制“=”: 没有找到接受“uchar *”类型的右操作数的运算符(或没有可接受的转换)
我怎么改都不行 是不是左边pixel是CvScalar结构定义的double类型 而右边是uchar?那要怎么改呢?为什么别人要把右边的强制转换成uchar类型呢 我感觉像素应该是0-255的整形啊?求解答 谢谢
[其他解释]
pix=(uchar*)(pFrImg22->imageData + pFrImg22->widthStep*j+i);  
*pix=255;
[其他解释]
引用:
pix=(uchar*)(pFrImg22->imageData + pFrImg22->widthStep*j+i);  
*pix=255;

这样写pix就变成野指针的 pix我是这样初始化的:uchar *pix=NULL;
 

[其他解释]
pix是指针,在进行图像处理时,指针是很关键的~
*pix  = 255;//OK了~
[其他解释]
引用:
pix是指针,在进行图像处理时,指针是很关键的~
*pix = 255;//OK了~

这样写就会中断
[其他解释]
我是来洗去经验的。。。
因为我也有你同样的问题要进行处理。。。

热点排行