利用OpenCV实现C++语言中二维数组的可视化、图像显示

利用OpenCV实现C++语言中二维数组的图像显示

在利用C++语言处理数组时,我们经常需要将图片的二维数组进行可视化;所以本文分享了一种利用OpenCV读取和生成图片的方法。

1. 利用OpenCV读取图片

前提条件:

  • 本文的程序是在visual Studio2012中执行的;
  • vs已经配置好调用OpenCV需要的设置,如包含库目录,库文件等;
  • 在当前文件夹下有一幅名为“1”的.jpg格式的图片;

在满足上述条件的情况下,执行如下程序,可读取1.jpg这幅图片。

如何读取不同的图片,如何变通?

关键的命令是:

“imread(filename,option)”

变通只要将filename变换为对应的“文件名”或者“路径+文件名”即可,注意程序里的双引号要用英文格式的。通过选择option可用不同的方式读取图片,本文是灰度读取“IMREAD_GRAYSCALE”。

程序:

#include "opencv.hpp"
#include "highgui.hpp"
using namespace cv;
int main()
{
    Mat image=imread("1.jpg",IMREAD_GRAYSCALE);
    cvNamedWindow("source image");
    imshow("source image",image);
    waitKey();
}

运行结果如下:

完整的结果:

2. 利用OpenCV实现C++语言中二维数组的可视化

仔细理解第一部分的程序,你就可以知道OpenCV显示图像是通过这一命令实现的:

“imshow("source image",image)

其中"source image"是打开图片窗口的名称,image就是你的Mat类型的变量。

    对于C++语言的二维数组,它一般为数值类型(整形、浮点型、字符串等等),所以无法直接进行可视化,需要将二维数组的类型赋值给Mat类型的变量。

给Mat类型的变量(假设为B)进行赋值需要执行命令:

“B.data[i] = 255;”

这里涉及到对象(结构体)的知识,你不理解也没关系,只要认为B.data就是Mat类型变量的数组就可以,如B.data[0],就是访问数组的第一个元素;B.data是一个一维数组,所以二维数组进行赋值时需要将元素对应到一维数组上。

实现程序如下:

#include "opencv.hpp"
#include "highgui.hpp"
#include "math.h"
using namespace cv;		

int main()
{
    const int M = 300,N = 400;	//图片的行、列像素
    int data[M][N] = {0};		//创建一个200×200的数组
    //下面循环产生一个沿对角线变大的数组
    for(int i=0;i<M;i++)
        for(int j=0;j<N;j++)
            data[i][j] = (int)(255*sqrt(i*i+j*j)/500);	
    Mat B = Mat(M,N,CV_8UC1);	//创建一个M×N大小的变量
    for(int i=0;i<M;i++)
    {
    for(int j=0;j<N;j++)
        {
            B.data[i*N+j]=data[i][j];
        }
    }
    cvNamedWindow("source image1");
    imshow("source image1",B);
    waitKey();
    return 0;
}

执行结果如下:

完整的结果:

3. 结论

利用Mat类型的.data性质进行变量访问,就可以实现二维数组赋值给Mat类型变量了,进而利用OpenCV的imshow命令将结果可视化。

おすすめ

転載: blog.csdn.net/qq_34917728/article/details/84502004