android opencv 如何获得特定像素点的颜色

android opencv 如何获得特定像素点的颜色,第1张

使用 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 图像的像素值提取和遍历的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9770920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存