使用 Mat 中对矩阵元素的地址定位的知识 (参考博文:OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解)
Code 1 :
int main()
{
//新建一个uchar类型的单通道矩阵(grayscale image 灰度图)
Mat m(400, 400, CV_8U, Scalar(0));
for (int col = 0; col < 400; col++)
{
for (int row = 195; row < 205; row++)
{
cout << (int)((mdata + mstep[0] row + mstep[1] col)) << " ==> ";
//获取第[row,col]个像素点的地址并用 符号解析
(mdata + mstep[0] row + mstep[1] col) = 255;
cout << (int)((mdata + mstep[0] row + mstep[1] col)) << endl;
}
}
imshow("canvas", m);
cvWaitKey();
return 0;
}
Output 1 :
0 ==> 255
0 ==> 255
0 ==> 255
0 ==> 255
0 ==> 255
0 ==> 255
Code1只是演示了单通道的情况,对于多通道的例子,请看 Code2 然后再看 Code3。
Fn 2 :
使用 Mat::at 函数
原型 template<typename _Tp> inline _Tp& Mat::at(…) //其中参数有多个,也就是说 at 函数有多个重载
返回值为 Mat 类型, Mat 有个索引的重载,也就是 [] 符号的重载,用这个重载可以定位多通道数据,具体示例可以看下面代码
下面的代码把红色通道值大于128的颜色的置为白色,左边为原图,右边为处理过后的图。
同一尺度?还是同一尺寸?
尺度跟像素没有任何关系。尺度空间是通过数字变化得到的一个概念上的空间。
实际图像中,你直接得不到尺度空间的。
常见的有:线性尺度空间、近似线性尺度空间和非线性尺度空间。
分辨率是单位尺寸上的像素个数。如每英寸多少像素。
如果分辨率是60PPI,你大小是1x2英寸
那么这幅图像的像素点数为1x60x2x60=720个点。
如下修改即可,矩阵越界了。
if (height_45>=ROW)
height_45=ROW-1;
if (width_45>=COL)
width_45=COL-1;
下面这句你写错了吧。
int width_45=width+dk+1;
估计是这样的
int width_45=width+d-k+1;
OpenCV中用于读取图像像素点的值的方法很多,这里主要提供了两种常用的方法。
方法一
利用IplImage数据类型的imageData定位数据缓冲区来实现,imageData包含指向图像第一个像素数据的指针
例:
If( imgSource != 0 )//imgSource为IplImage
{
for ( int i = 0; i < imgSource->height; ++i )
{
uchar pucPixel = (uchar)imgSource->imageData + iimgSource->widthStep;
for ( int j = 0; j < imgSource->width; ++j )
{
pucPixel[3j] = 0;//像素第一个通道的值
pucPixel[3j + 1] = 0;//像素第二个通道的值
pucPixel[3j + 2] = 0;//像素第三个通道的值
}
}
}
方法二
利用OpenCV提供的GetRealD,SetRealD和GetD,SetD,这里为2,对于单通道图像可以使用前两个函数,对于多通道图像可以使用后两个函数
例:
If( imgSource != 0 )//imgSource为IplImage
{
for ( int i = 0; i < imgSource->height; ++i )
for ( int j = 0; j < imgSource->width; ++j )
{
//获取(i, j)处的三通道图像像素值
CvScalar scaPixelVal = cvGet2D( imgSource, i, j );
//获取(i, j)处的单道图像像素值
double dPixelVal = cvGetReal2D( imgSource, i, j );
//设定(i, j)处的三通道图像像素值
cvSet2D( imgSource, i, j, scalPixelVal );
//设定(i, j)处的单通道图像像素值
cvSetReal2D( imgSource, i, j, dPixelVal );
}
}
以上就是关于android opencv 如何获得特定像素点的颜色全部的内容,包括:android opencv 如何获得特定像素点的颜色、opencv,图片像素和尺寸大小、vs 2010 C++ 的Opencv 图像的像素值提取和遍历的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)