1. 程式人生 > >OpenCV中操作Mat的copy()和clone()的區別

OpenCV中操作Mat的copy()和clone()的區別

OpenCV中使用Mat,經常會碰到這樣一種場景,會想拷貝一份Mat,並對新的Mat進行操作。但是OpenCV中的clone()和直接賦值都會導致共享資料區,也就是相當於&。

而使用copy,才會獲取新的Mat。

// Mat is basically a class with two data parts: the matrix header and   
//a pointer to the matrix containing the pixel values   
  
#include <iostream>  
#include <highgui.h>  
  
using namespace std ;  
using namespace cv ;  
  
int main()  
{  
    Mat image = imread("1.png" , 0) ;  
      
    //Mat image1(image) ;//僅是建立了Mat的頭部分,image1與image共享資料區  
    //Mat image1 = image ;//僅是建立了Mat的頭部分,image1與image共享資料區  
    //Mat image1 = image.clone() ;//完全拷貝,把image中的所有資訊拷貝到image1中  
    Mat image1 ;  
    image.copyTo(image1) ;//拷貝image的資料區到image1中,在拷貝資料前會有一步:image1.create(this->size , this->type)  
    for(int h = 0 ; h < image1.rows ; ++ h)  
    {  
        uchar* ptr = image1.ptr(h) ;  
        for(int w = 0 ; w < image1.cols ; ++ w)  
        {  
            ptr[w] = 0 ;  
        }  
    }  
    imshow("image" , image) ;  
    imshow("image1" , image1) ;  
    waitKey() ;  
    return 0 ;  
}  


相關推薦

OpenCV操作Mat的copy()clone()的區別

OpenCV中使用Mat,經常會碰到這樣一種場景,會想拷貝一份Mat,並對新的Mat進行操作。但是OpenCV中的clone()和直接賦值都會導致共享資料區,也就是相當於&。 而使用copy,才會獲取新的Mat。 // Mat is basically a clas

Jenkins高階篇之Pipeline實踐篇-2-groovy字串操作split()tokenize()區別

這篇來一個字串切割的練習,很多人知道字串切割是用split()方法,但是很少人知道在groovy中,有一個方法叫tokenize(),這兩個方法其實都可以實現字串切割,但是兩者還是有區別的,本篇就來學習和掌握兩者的共同點和區別。我也是,之前第一選擇就是使用split()函式,直到知道有token

opencvc版本c++版本區別體驗

      1.  顯示視窗大小的改變方法不同。   在c版本中,定義一個視窗時用cvNamedWindow.   比如說cvNamedWindow(“src”,0);後面的引數為0表示視窗大小可以手動改變,否則視窗的大小是自適應圖片大小的。   而在c++版本中定

JS 的require import 區別

js模塊化 version 函數名 比較 extc 做到 logs imp 變量 在研究react和webpack的時候,經常看到在js文件中出現require,還有import,這兩個都是為了JS模塊化編程使用。CSS的是@import 1.ES6 模塊的設計思想,是盡量

MySQL存儲引擎的MyISAMInnoDB區別詳解

訪問 過程 包含 lte 處理機制 comm 用戶 isam log MyISAM是MySQL的默認數據庫引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,但卻有一個缺點:不

makefile=、:=+=的區別

有感 分析 eight c語言 區別 all ont 總結 mil 經常有人分不清= 、:=和+=的區別 這裏我總結下做下詳細的分析: 首先你得清楚makefile的運行環境,因為我是linux系統,那麽我得運行環境是shell 在Linux的shell裏,shell

ajax的onloadreadychange區別

ntb XML stat img 自己 變化 value tel lis 先補個知識點: readyState 狀態碼: 0:請求未初始化 1:服務器連接已建立 2:請求已接受 3:請求處理中 4:請求已完成,且響應已就緒 HTTP 狀態碼: 200 - 服務器成功返回

ES6的letvar區別

文件 周期 cti 語句 function 作用範圍 spa 作用 方式 js函數中聲明變量有多種方式。 var xx; function test(){ var aa; //聲明一 let bb;//聲明二 this

關於python的is==的區別

效率 什麽 比較 == 操作 切片 har none 人的 在 Python 中會用到對象之間比較,可以用 ==,也可以用 is 。但是它們的區別是什麽呢? is 比較的是兩個實例對象是不是完全相同,它們是不是同一個對象,占用的內存地址是否相同。萊布尼茨說過:“世界上沒

原生jsslice()方法splice()區別

ole pre 結束 兩個 object splice 區別 沒有 slice slice()方法和splice()方法都是原生js中對數組操作的方法。 slice(),返回一個新的數組,該方法可從已有的數組中返回選定的元素。例如:arrObject(start,end

Python的is==的區別,is判斷值是否相等,id判斷地址是否一致

copy 就是 是否一致 val 類型 對象 包含 () true Python中的is和==的區別 Python中的對象包含三要素:id、type、value。 其中id用來唯一標示一個對象,type標識對象的類型,value是對象的值。 is判斷的是a對象是否就是b對象

JS的importrequire區別

地方 建議 運行時 es6 www. https sun rom 語法 1、import xx from yy的方式是靜態編譯,即編譯時加載,要寫在文件的最上頭,但是import()函數可以實現動態加載,寫在任何地方 2、require是動態加載,即運行時加載,理論上可以放

hibernate的loadget區別

package com.zking.dao.daoImpl; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transact

OpenCV-Python] OpenCV 攝像機標定 3D 重構 部分 VII

https://www.cnblogs.com/Undo-self-blog/p/8448500.html 42 攝像機標定 目標   • 學習攝像機畸變以及攝像機的內部引數和外部引數   • 學習找到這些引數,對畸變影象進行修復 42.1 基礎   今天的低價單孔攝像機(照相機)會給影

Opencv矩陣操作copyTo convertTo clone reshape

<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod=popu_307 data-dsm = "post" >

java的equals==的區別

 1)對於==,如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;     如果作用於引用型別的變數,則比較的是所指向的物件的地址   2)對於equals方法,注意:equals方法不能作用於基本資料型別的變數     如果沒有對equals方法進行重寫,則比較的是引用

js的substrsubstring區別

問題 one 開始 如果 說明 是個 表示 live 不同的 Substring: 該方法可以有一個參數也可以有兩個參數。 (1) 一個參數: 示例: var str=“Olive”; str.substring(3); 結果

opencv cv2.KeyPointcv2.DMatch的理解

cv2.KeyPoint是opencv中關鍵點檢測函式detectAndCompute()返回的關鍵點的類,他包含關鍵點的位置,方向等屬性具體如下: #point2f pt;//位置座標 # float size; // 特徵點鄰域直徑 #float angle; // 特徵點的方向,值為[零,

Java HttpServletRequestgetAttribute()方法getParameter()區別

  一、ServletRequest介面   HttpServletRequest介面繼承了ServletRequest介面,實現類通常代表一個實際的Http Request。   Servlet容器負責建立一個HttpServletRequest物件(在Web伺服器接收到瀏覽器的一個請求後),然後Ser

maven dependencyscope=compile provided區別

問題再現: 上次這邊朋友問我一個問題,就是他們在pom.xml中的dependency中,看到有一些是provided的情況,比如如下: <!--lombok--> <dependency> <