opencv之Mat与图片像素点

1、图片像素

(1)像素就是指组成图像的小方格。这些小方格有明确的位置与分配好的颜色值。颜色与位置共同决定呈现出来的效果。
(2)每张图片都是由一个一个像素点组成的,对于rgb格式的图片来说,一个像素点就占用了三个字节。对于一个400X400的图片,它就占用了400X400X3个字节。
(3)一张图片的所有像素点存在MAT矩阵中,MAT[i,j]就是当前点的像素值。
(4)对于灰度图来说,是单通道,彩色图,三通道

2、Mat是一个基本图像容器类。
在这里插入图片描述

3、验证每张图片是由很多像素点组成的,取出图片的每一个像素点,并将特定的几行用其他颜色代替

 	Mat pic=imread("1.jpg");
    qDebug()<<"pic row.."<<pic.rows;//图片由多少行
    qDebug()<<"pic col.."<<pic.cols;//图片多少列
    qDebug()<<"pic ptr..."<<pic.ptr(0);//查看第0行像素点
    qDebug()<<"pic data..."<<pic.data;//数据的起始地址
   
    cvtColor(pic,pic,CV_BGR2RGB); //mat格式转换成image, mat格式默认是bgr,需要转换成rgb
    uchar Imagarry[pic.cols*pic.rows*3]={0}; //定义矩阵,来存储每一个像素点的值
    for(int i=0;i<pic.rows;i++)
    {
        for(int j=0;j<pic.cols;j++)
        {
            //指定某几行的颜色
            if(i>100&&i<200)
            {
                Imagarry[i*400*3+j*3+0]=255;
                Imagarry[i*400*3+j*3+1]=255;//黄色
                Imagarry[i*400*3+j*3+2]=0;
            }
            else
            {
                Imagarry[i*400*3+j*3+0]=0;
                Imagarry[i*400*3+j*3+1]=255;//绿色
                Imagarry[i*400*3+j*3+2]=0;
            }
        }
    }
    //4个参数,数据的起始地址,宽高,转换的格式
    QImage img4=QImage((const unsigned char*)(Imagarry), pic.cols,pic.rows,QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(img4));   //像显示图片
 

实现效果:
在可以=这里插入图片描述
3、测试取本图片的像素点,在这个图片的基础上进行修改。

 cvtColor(pic,pic,CV_BGR2RGB);
    uchar Imagarry[pic.cols*pic.rows*3]={0}; //定义矩阵。
    for(int i=0;i<pic.rows;i++)//一个一个点取数据
    {
        uchar * cur_ptr=pic.ptr(i);
        for(int j=0;j<pic.cols;j++)
        {
            if(i>200&&i<300)
            {
                Imagarry[i*400*3+j*3+0]=0;
                Imagarry[i*400*3+j*3+1]=0;
                Imagarry[i*400*3+j*3+2]=255;
            }
            else {
                //来验证每张图片都是由像素点组成的。
                Imagarry[i*400*3+j*3+0]=cur_ptr[j*3+0];
                Imagarry[i*400*3+j*3+1]=cur_ptr[j*3+1];
                Imagarry[i*400*3+j*3+2]=cur_ptr[j*3+2];//赋值的是自己图片上的像素点
            }

        }
    }
    //4个参数,数据的起始地址,宽高,转换的格式
    QImage img4=QImage((const unsigned char*)(Imagarry), pic.cols,pic.rows,pic.step,QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(img4));   //像显示图
 

在这里插入图片描述
3、opencv显示图片使用的是imshow()函数,显示在qt上,需要将Mat格式的图片转换成QImage。并且mat默认格式BGR,需要转换成RGB的格式。


    cvtColor(srcImage4,srcImage4,CV_BGR2RGB); //mat格式默认是bgr,需要转换成rgb
    img4=QImage((const unsigned char*)(srcImage4.data), srcImage4.cols,srcImage4.rows,QImage::Format_RGB888);  //4个参数,数据的起始地址,宽高,转换的格式

版权声明:本文为qq_43243907原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。