opencv 自学日记4-像素操作例程Demo

        前期的学习应该多学习一些东西,尽管初期的人脸识别应该用不到像素级的操作,但还是是要了解一下,并无坏处。

直接上代码:

#include "mainwindow.h"
#include <QApplication>

#include <iostream>
#include <stdio.h>
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"

using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Mat m(3,2,CV_8UC3,Scalar(0,0,255));
    cout << "M=" << endl << " " << m<< endl;


    Mat grayim(600,800,CV_8UC1);
    Mat colorim(600,800,CV_8SC3);
    
    //遍历所有像素,并设置像素值
    for(int i = 0;i<grayim.rows;++i)
    {
        for(int j = 0;j <colorim.cols;++j)
        {
            grayim.at<uchar>(i,j) = (i+j)%255;
        }
    }

    for(int i = 0;i<colorim.rows;++i)
    {
        for(int j = 0;j<grayim.cols;++j)
        {
            Vec3d pixel;
            pixel[0] = i%255;
            pixel[1] = j%255;
            pixel[2] = 0;

            colorim.at<Vec3d>(i,j,0) = pixel;
        }
    }

    //显示结果
    imshow("grayim",grayim);
    imshow("colorim",colorim);

    waitKey(0);

    
    return 0;
}
在这段代码中,有一个问题,根据书上的例程,这一句应该为
 for(int j = 0;j<grayim.cols;++j)
        {
            Vec3d pixel;
            pixel[0] = i%255;
            pixel[1] = j%255;
            pixel[2] = 0;

            colorim.at<Vec3d>(i,j) = pixel;
        }
但是会报错,加上0之后,编译通过,可以运行,单通道的图像和预期一样,但是3通道的图像则不能显示。此问题待研究。
结果如下:



猜你喜欢

转载自blog.csdn.net/bootleader/article/details/80977931