计算机视觉
图像处理

基础学习笔记之opencv(8):Mat – 基本图像容器

实验说明:
本文主要讲一些Opencv 2.0版本后出现的Mat矩形类,主要是参考opencv自带doc文件夹下的tutiol教材。通过这次实验觉得用Mat的话下面几点需要特别注意(在代码中可以体现出来):
利用create函数重新改变Mat数据在内存中的布局。
注意多通道数据在Mat中其实也是占一个元素的位置的。
学会多维Mat的创建方法。
当Mat矩阵比较小时,学会直接赋值的方法,即用Mat_。
5.  掌握Mat矩阵内容输出到终端时的几种常见格式。
6.  注意如果vector是单独一维的话需要转换成Mat才能输出,多维的可以直接输出,例如vector里面存放的是点的话。
开发环境:Ubuntu12.04+Qt4.8.2+QtCreator2.5+opencv2.4.2
实验结果:
软件运行后界面(每按一下next,执行关于Mat的一部分代码):

终端输出数据截图:

实验代码和注释:
mainwindow.h:  #ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private slots:
    void on_nextButton_clicked();

    void on_closeButton_clicked();

private:
    Ui::MainWindow *ui;
    int next_num;
};

#endif // MAINWINDOW_H 
mainwindow.cpp:   #include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include

using namespace std;
using namespace cv;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //setStyleSheet为设置工作表的风格,其参数是一个Qstring类型,utf-8是unicode中一种变长编码
    //background-color为Qt Style Sheets的一个属性,具体的使用方法可以查看其帮助文档
    ui->textBrowser->setStyleSheet(QString::fromUtf8 ("background-color:black"));
    next_num = 0;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_nextButton_clicked()
{
    next_num ++;
    ui->textBrowser->setTextColor( Qt::green );
    switch (next_num)
        {
           case 1:
            {
                ui->textBrowser->append
                        (
                             "--------------------------------------------------------------------------\r"
                             "This program shows how to create matrices(cv::Mat) in OpenCV and its serial"
                             " out capabilities\r"
                             "That is, cv::Mat M(...); M.create and cout << M.\r "                              "Shows how output can be formated to OpenCV, python, numpy, csv and C styles.\r"                              "Usage:\r"                              "./cvout_sample\r"                              "--------------------------------------------------------------------------\r"                          );                 break;             }            case 2:                {                     Mat M( 2, 2, CV_8UC3, Scalar(0,255,0) );//其实是2*6的矩阵,因为每个元素有3个通道。                     ui->textBrowser->append("create by using the constructor......" );
                    cout<<"M =   "<textBrowser->append( "create by using create function......" );
                    cout<<"M =   "<textBrowser->append( "create multidimensional matrix......" );
                   // cout<<"L =   "<textBrowser->append( "using matlab stytle......" );
                    cout<<"E =  "<(3,3)<<0,-1,0,-1,5,-1,0,-1,0);//直接赋初始值的方法                     Mat row_clone = C.row(1).clone();                     ui->textBrowser->append( "create 3*3 double-precision identity matrix......" );
                    cout<<"C =  "<textBrowser->append( "fill a matrix with rand numbers......" );
                    cout<<"R (default) =  "<textBrowser->append( "demonstrate the output formating options......" );
                    cout<<"R (python) = "<textBrowser->append( "the point format output......" );

                    Point2f P1(5, 1);
                    cout<<"Point (2D) = "<vPoints(N);//vector可以用变量定义其长度,比数组好用
                    for( size_t E = 0; E < vPoints.size(); ++E )    //size_t其实就是一个unsigned int类型                         vPoints[E] = Point2f((float)(E*5), (float)(E%7));                     cout<<"vPoints[] =  "<
main.cpp:  #include
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();

附:工程code下载

转载注明来源:CV视觉网 » 基础学习笔记之opencv(8):Mat – 基本图像容器

分享到:更多 ()
扫描二维码,给作者 打赏
pay_weixinpay_weixin

请选择你看完该文章的感受:

0不错 0超赞 0无聊 0扯淡 0不解 0路过

评论 3

评论前必须登录!