码迷,mamicode.com
首页 > 其他好文 > 详细

opencv图像像素值读取

时间:2015-05-07 10:22:06      阅读:501      评论:0      收藏:0      [点我收藏+]

标签:

说到图像像素,肯定要先认识一下图像中的坐标系长什么样。

 1. 坐标体系中的零点坐标为图片的左上角X轴为图像矩形的上面那条水平线Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。(OpenCV中有些数据结构的坐标原点是在图片的左下角,可以设置的)。

 2. 在使用image.at<TP>(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标(也就是编程中的pic.rows那行)。x2同理。

 3. 如果所画图像是多通道的,比如说image图像的通道数时n,则使用Mat::at(x, y)时,其x的范围依旧是0到image的height,而y的取值范围则是0到image的width乘以n,因为这个时候是有n个通道,所以每个像素需要占有n列。但是如果在同样的情况下,使用Mat::at(point)来访问的话,则这时候可以不用考虑通道的个数,因为你要赋值给获取Mat::at(point)的值时,都不是一个数字,而是一个对应的n维向量。

 4. 多通道图像在使用minMaxLoc()函数是不能给出其最大最小值坐标的,因为每个像素点其实有多个坐标,所以是不会给出的。因此在编程时,这2个位置应该给NULL。

Mat src=imread("image/color.jpg");
    imshow("a",src);
    int i,j;
    int cPointR,cPointG,cPointB,cPoint;//currentPoint;
    for(i=1;i<src.rows;i++)
        for(j=1;j<src.cols;j++)
        {
            cPointB=src.at<Vec3b>(i,j)[0];
            cPointG=src.at<Vec3b>(i,j)[1];
            cPointR=src.at<Vec3b>(i,j)[2];
            if(cPointB>100&cPointR<100&cPointG<100)
                {
                    src.at<Vec3b>(i,j)[0]=0;  //单通道是uchar,没有[0][1][2]
                    src.at<Vec3b>(i,j)[1]=0;
                    src.at<Vec3b>(i,j)[2]=0;
            }
            
        }
    imshow("da",src);

 

opencv图像像素值读取

标签:

原文地址:http://www.cnblogs.com/Daringoo/p/4483864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!