最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解OpenCV圖像的概念和基本操作

 更新時(shí)間:2021年10月09日 10:08:44   作者:C君莫笑  
opencv最主要的的功能是用于圖像處理,所以圖像的概念貫穿了整個(gè)opencv,與其相關(guān)的核心類就是Mat。這篇文章主要介紹了OpenCV圖像的概念和基本操作,需要的朋友可以參考下

前言:

opencv最主要的的功能是用于圖像處理,所以圖像的概念貫穿了整個(gè)opencv,與其相關(guān)的核心類就是Mat。

像素:

圖片尺寸以像素為單位時(shí),每一厘米等于28像素,如1515厘米長度的圖片,等于420420像素的長度。一個(gè)像素所能表達(dá)的不同顏色數(shù)取決于比特每像素(BPP)。

灰度圖像:8bpp=2的8次方=256色,
高彩色:16bpp=2的16次方=65536色,
真彩色:24bpps=2的24次方=16777216色。

圖像分辨率:

圖像分辨率是圖像總像素的多少,由于圖像通常用矩陣表示,所以分辨率常用,mn表示,注意: n 表示行數(shù)(代表一列包含的像素),m表示列數(shù)代表一行包含的像素。

640X480表示圖像的長和寬分別為640和480,總像素為640X480=307200(相機(jī)中所說的30萬分辨率),
800X600表示圖像的長和寬分別為800和600,總像素為800X600=480000(相機(jī)中所說的50萬分辨率)。

圖像和矩陣

圖像是由像素組成的,而像素實(shí)際上就是帶有坐標(biāo)位置和顏色信息的點(diǎn)。我們把圖片想象成由若干行,若干列的點(diǎn)組成的, 現(xiàn)實(shí)中有RGB顏色系統(tǒng),我們可以把圖中任意一點(diǎn)(位置在第m行,第n列)的點(diǎn)A表示為

A[m,n] = [blue,green,red]
參數(shù)解讀
m |A點(diǎn)在圖像中的第m行
n |A點(diǎn)在圖像中的第n列
blue |表示藍(lán)色,三原色(RGB)的第一個(gè)數(shù)值
green|表示綠色,三原色(RGB)的第二個(gè)數(shù)值
red |表示紅色,三原色(RGB)的第一個(gè)數(shù)值

每個(gè)點(diǎn)對(duì)應(yīng)的亮度可以理解為rgb的值,無符號(hào)8位數(shù)3維,則一個(gè)像素點(diǎn)為3維數(shù)組,分別對(duì)應(yīng)RGB的值,在OpenCV中數(shù)據(jù)類型為:cV_8u3C。
假設(shè)Mx N,lij表示第j行j列,對(duì)應(yīng)上圖就是M= 300,N= 200。
假設(shè)Mx N,lij表示第j行j列,對(duì)應(yīng)上圖就是M= 300,N= 200。

在這里插入圖片描述

注意:在Opencv中三維數(shù)組存儲(chǔ)RGB值,存儲(chǔ)顏色通道的順序不是RGB,而是BGR,如下圖:

在這里插入圖片描述

Mat排列方式如下:

在這里插入圖片描述

像素值的讀寫

很多時(shí)候,我們需要讀取某個(gè)像素值,或者設(shè)置某個(gè)像素值;在更多的時(shí)候,我們需要對(duì)整個(gè)圖像里的所有像素進(jìn)行遍歷。OpenCV提供了多種方法來實(shí)現(xiàn)圖像的遍歷。
方法一:at 函數(shù)

     cv::Mat grayim(600, 800, CV_8UC1);
    // 遍歷所有像素,并設(shè)置像素值
    for( int i = 0; i < grayim.rows; ++i)
    {
        for( int j = 0; j < grayim.cols; ++j )
        {
             grayim.at<uchar>(i,j) = (i+j)%255;
        }

    }
   imshow("grayim",grayim);
    cv::Mat colorim(600, 800, CV_8UC3);
    // 遍歷所有像素,并設(shè)置像素值
    for( int i = 0; i < colorim.rows; ++i)
    {
        for( int j = 0; j < colorim.cols; ++j )
        {
            cv::Vec3b pixel;
            // 注意:opencv通道順序,BGR,非RGB
            pixel[0] = i%255;  // Blue
            pixel[1] = j%255;  // Green
            pixel[2] = 0;      // Red
            colorim.at<Vec3b>(i,j) = pixel;
        }
    }
    imshow("colorim",colorim);
    waitKey();

方法一:使用數(shù)據(jù)指針

 cv::Mat grayim(600, 800, CV_8UC1);
    cv::Mat colorim(600, 800, CV_8UC3);
    //遍歷所有像素,并設(shè)置像素值
    for( int i = 0; i < grayim.rows; ++i)
    {
        //獲取第 i 行首像素指針
        uchar * p = grayim.ptr<uchar>(i);
        //對(duì)第 i 行的每個(gè)像素(byte)操作
        for( int j = 0; j < grayim.cols; ++j )
        p[j] = (i+j)%255;
    }
    //遍歷所有像素,并設(shè)置像素值
    for( int i = 0; i < colorim.rows; ++i)
    {
        //獲取第 i 行首像素指針
        cv::Vec3b * p = colorim.ptr<cv::Vec3b>(i);
        for( int j = 0; j < colorim.cols; ++j )
        {
            p[j][0] = i%255;    //Blue
            p[j][1] = j%255;    //Green
            p[j][2] = 0;        //Red
        }
    }

    imshow("grayim",grayim);
     imshow("colorim",colorim);

實(shí)驗(yàn)效果

在這里插入圖片描述

圖像局部操作

選擇單行/單列
示例:A矩陣的第i行,將這一行的所有元素都乘以2,然后賦值給第j行

A.row(j)= A.row(i)*2;

選擇多行/多列
Range是OpencV中新增的類,該類有兩個(gè)關(guān)鍵變量star和end。Range對(duì)象可以用來表示矩陣的多個(gè)連續(xù)的行或者多個(gè)連續(xù)的列。其表示的范圍為從start到end,包含start。

// 創(chuàng)建一個(gè)單位陣
Mat A = Mat::eye(10, 10, CV_32S);
// 提取第 1 到 3 列(不包括 3)
Mat B = A(Range::all(), Range(1, 3));
// 提取B的第 5 至 9 行(不包括 9)
// 其實(shí)等價(jià)于C = A(Range(5, 9), Range(1, 3))
Mat C = B(Range(5, 9), Range::all());

選擇指定區(qū)域

圖像中提取感興趣區(qū)域(Region of interest)有兩種方法:
方法—:使用構(gòu)造函數(shù)

//創(chuàng)建寬度為 320,高度為 240 的 3 通道圖像
Mat img(Size(320, 240), CV_8UC3);
//roi 是表示 img 中 Rect(10, 10, 100, 100)區(qū)域的對(duì)象
Mat roi(img, Rect(10, 10, 100, 100));

方法二:使用括號(hào)運(yùn)算符

Mat roi2 = img(Rect(10, 10, 100, 100));
//當(dāng)然也可以使用Range對(duì)象來定義感興趣區(qū)域,如下:
// 用括號(hào)運(yùn)算符
Mat roi3 = img(Range(10, 100), Range(10, 100)); 
// 用構(gòu)造函數(shù)
Mat roi4(img, Range(10, 100), Range(10, 100));

取對(duì)角線元素

矩陣的對(duì)角線元素可以使用cv::Mat就的diag()函數(shù)獲取:

Mat Mat::diag(int d) const

1.當(dāng)d=0時(shí),表示取主對(duì)角線; 當(dāng)參數(shù)d>0是,表示取主對(duì)角線下方的次對(duì)線,
2. 當(dāng)d=1時(shí),表示取主對(duì)角線下方,且緊貼主多角線的元素;
3. 當(dāng)參數(shù)d<0時(shí),示取主對(duì)角線上方的次對(duì)角線。如同row()和col)函數(shù),diag()函數(shù)也不進(jìn)行內(nèi)存復(fù)制操作,其復(fù)雜度也是0(1)。

到此這篇關(guān)于OpenCV圖像的概念和基本操作的文章就介紹到這了,更多相關(guān)OpenCV圖像基本操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 破解加密zip文件的密碼

    python 破解加密zip文件的密碼

    這篇文章主要介紹了python 如何破解加密zip文件的密碼,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • 利用python打開攝像頭及顏色檢測(cè)方法

    利用python打開攝像頭及顏色檢測(cè)方法

    今天小編就為大家分享一篇利用python打開攝像頭及顏色檢測(cè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Django把SQLite數(shù)據(jù)庫轉(zhuǎn)換為Mysql數(shù)據(jù)庫的過程

    Django把SQLite數(shù)據(jù)庫轉(zhuǎn)換為Mysql數(shù)據(jù)庫的過程

    之前我們默認(rèn)使用的是SQLite數(shù)據(jù)庫,我們開發(fā)完成之后,里面有許多數(shù)據(jù),如果我們想轉(zhuǎn)換成Mysql數(shù)據(jù)庫,那我們先得把舊數(shù)據(jù)從SQLite導(dǎo)出,然后再導(dǎo)入到新的Mysql數(shù)據(jù)庫里去,這篇文章主要介紹了Django如何把SQLite數(shù)據(jù)庫轉(zhuǎn)換為Mysql數(shù)據(jù)庫,需要的朋友可以參考下
    2023-05-05
  • Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法

    Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法

    這篇文章主要給大家介紹了關(guān)于Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法,在大部分開發(fā)過程中,我們需要使用到python3進(jìn)行測(cè)試,于是下載安裝python3,近乎是一種剛需,至于設(shè)置默認(rèn)python指向python3可以參考本文
    2023-09-09
  • pycharm遠(yuǎn)程連接docker容器的操作流程

    pycharm遠(yuǎn)程連接docker容器的操作流程

    這篇文章主要給大家介紹了pycharm遠(yuǎn)程連接docker容器的操作流程,文中通過代碼示例和圖文講解介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-08-08
  • python matplotlib工具欄源碼探析二之添加、刪除內(nèi)置工具項(xiàng)的案例

    python matplotlib工具欄源碼探析二之添加、刪除內(nèi)置工具項(xiàng)的案例

    這篇文章主要介紹了python matplotlib工具欄源碼探析二之添加、刪除內(nèi)置工具項(xiàng)的案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Python+Pygame實(shí)現(xiàn)之見縫插針游戲的實(shí)現(xiàn)

    Python+Pygame實(shí)現(xiàn)之見縫插針游戲的實(shí)現(xiàn)

    這篇文章主要為大家介紹了如何利用Python中的Pygame模塊實(shí)現(xiàn)見縫插針游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python游戲開發(fā)有一定幫助,需要的可以參考一下
    2022-07-07
  • pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn)

    pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn)

    這篇文章主要介紹了pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python使用鄰接矩陣構(gòu)造圖代碼示例

    python使用鄰接矩陣構(gòu)造圖代碼示例

    這篇文章主要介紹了python使用鄰接矩陣構(gòu)造圖代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python爬蟲爬取愛奇藝電影片庫首頁的實(shí)例代碼

    Python爬蟲爬取愛奇藝電影片庫首頁的實(shí)例代碼

    這篇文章主要介紹了Python爬蟲爬取愛奇藝電影片庫首頁的實(shí)例代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

综艺| 鹤峰县| 蓬安县| 微博| 迁西县| 邢台市| 武功县| 财经| 凯里市| 临澧县| 扶绥县| 东兴市| 嘉善县| 体育| 广灵县| 德保县| 威信县| 武平县| 贡嘎县| 霸州市| 通州区| 万荣县| 灯塔市| 黄浦区| 靖宇县| 周宁县| 江永县| 全椒县| 绥芬河市| 汝州市| 调兵山市| 舞阳县| 太谷县| 永德县| 抚顺市| 布拖县| 怀远县| 元江| 吴江市| 资中县| 定日县|