1. 程式人生 > >opencv三種遍歷畫素及兩種擷取圖片方法

opencv三種遍歷畫素及兩種擷取圖片方法

1.最簡單也是最基本的for迴圈

for(int i=0;i<img.rows;++i)
    for(int j=0;j<img1.cols;++j)
    {
        Vec3b pelex;
        pelex[0] = 0;
        pelex[1] = 0;
        pelex[2] = 255;
        img1.at<Vec3b>(i, j) = pelex;
    }

at()方法是用於讀取或者修改畫素點的方法

2.迭代器迭代法

int i=0;
MatIterator<Vec3b> imgit,imgend;  //MatIterator是Mat型別的迭代器
//就是將高維的矩陣轉換為一維矩陣,以我的理解就是一個暫存畫素的容器 for(imgit=img.begin(),imgend=img.end();imgit<imgend;imgit++) { ++i; imgit[0]=i%255; imgit[1]=i%255; imgit[2]=i%255; }

3.指標方法遍歷畫素

for(int i=0;i<img.rows;++i)
{
    uchar *p=img.ptr<uchar>(i); //獲取第i行第一個畫素的指標
    for(int j=0;j<img.cols;++j)
    {
        p[j][0
] = (i) % 255; p[j][1] = (j) % 255; p[j][2] = (i + j) % 255; }

指標方法與上述的for方法區別在於不用再呼叫at()方法,在處理大量資料的時候速度回大大加快

//擷取影象區域方法
1.Range()方法
使用Range()方法可以方便地擷取圖片上的某一部分
注意使用時不要超出原圖片的畫素範圍

Mat cut=img(Range(50,100),Range(50,100));
//還有一個all()方法
Mat cut1=img(Range::all(),Range(100,200));
//這兩種方式都可以從原圖上擷取對應的影象部分

經過程式碼實驗,截取出來的影象也是指向原影象的記憶體區域
Mat cut = img1(Range(100, 200), Range::all());
for(int i=100;i<200;++i)
    for (int j = 100; j < 200; ++j)
    {
        Vec3b pilex;
        pilex[0] = 0;
        pilex[1] = 0;
        pilex[2] = 0;
        img1.at<Vec3b>(i, j) = pilex;
    }
imshow("cut",cut);
imshow("img1", img1);

這裡寫圖片描述

2.感興趣區域Rect()
Rect()的四個引數分別是影象左上點座標和長寬

Mat temp(img(Rect(10,10,200,200)));
//或
Mat temp1=img(Rect(10,10,100,100));

相關推薦

opencv擷取圖片方法

1.最簡單也是最基本的for迴圈 for(int i=0;i<img.rows;++i) for(int j=0;j<img1.cols;++j) { Vec3b pelex; pelex[0]

載入影象和OpenCV

#include <iostream> using namespace std; #include <opencv2\opencv.hpp> using namespace cv; void main() { Mat imgMat = imread("0_depth.png

Opencv和imadjust函式實現

Opencv遍歷畫素有四種方式 第一種 利用opencv中     for (int i = 0; i < nrow; i++)     {         for (int j = 0; j < ncol; j++)         {         

二叉樹遞迴非遞迴實現

二叉樹的三種遍歷方式包括: 前序遍歷中序遍歷後序遍歷 三種遍歷的遞迴方法都非常好實現,而且簡單易懂。非遞迴實現也是通過使用棧來模擬遍歷的過程。順便提一句,能用遞迴做的,基本都能用棧來實現。前序遍歷和中序遍歷的非遞迴寫法相對比較簡單,只需要模擬遍歷過程即可。後序遍歷非遞迴寫

列表裏面序號和值的方法

開始 clas pri border padding span style %s pytho list = [‘html‘, ‘js‘, ‘css‘, ‘python‘] # 方法1 # 遍歷列表方法1:‘ for i in list: print("序號:%s

JavaScript 算法應用: DOM樹的方式

pan 方式 In alt script mil 深度優先 info 算法 1 常見的DOM樹結構: 2 DOM數遍歷有兩種方式: 3 廣度優先代碼: 4 深度優先遍歷代碼 JavaScript 算法應用: 遍歷DOM樹的兩種方式

Leetcode 336. Palindrome Pairs 給出一字串迴文子串中心的方法

題意 給你n個不同的字串,讓你找出所有的字串對(i, j),使得s(i) + s(j)是迴文串且i不等於j 思路 這題沒有給資料範圍,所以你其實不知道應該給什麼複雜度的演算法,我看了眼Discussion,先確定了下需要的複雜度 複雜度是O(n *

二叉樹 知道其他方式求另一

已知先序和中序 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *

Python目錄檔案的方法

方法一:遞迴法 1 2 3 4 5 6 7 8 import osdef displayDir2(dir):     for i in os.listdir(dir):         file = os.path.join(dir,i)         if

Java中 List的方法

Java List遍歷方法 及其效率對比 package com.zbalpha.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List;

二叉樹的建立方式詳解

建立一個如下圖所示的二叉樹 程式如下: #include<stdio.h> #include<stdlib.h> //定義二叉樹 typedef struct _tree_node { char date; struct tree_node

二叉樹方式通過重構二叉樹(java實現)

重構方法參考文章【重構二叉樹(Java實現):https://blog.csdn.net/wangbingcsu/article/details/51372695】 文章目錄 二叉樹類 三種遍歷方式 前序遍歷 中序遍歷 後序遍歷

二叉樹的常見方法方式 Java 實現

讀完本文你將瞭解到: 樹的分類有很多種,但基本都是 二叉樹 的衍生,今天來學習下二叉樹。 什麼是二叉樹 Binary Tree 先來個定義: 二叉樹是有限個節點的集合,這個集合可以是空集,也可以是一個根節點和至多兩個子二叉樹組成的集合,其中一顆樹叫做根的左子樹,另一棵叫做根的右子樹。

C語言基本資料結構之二(二叉樹的,節點數以深度演算法)

關於二叉樹的定義,網上有比較好的介紹,在這裡就簡單介紹二叉樹的一些性質 二叉樹的基本性質 1)二叉樹的第i層上至多有 2^(i-1)(i ≥1)個結點; 2)深度為 h 的二叉樹中至多含有 2^h – 1 個結點; 3)若在任意一棵二叉樹中,有 n0 個葉子結點,有 n2

集合的方式

叠代器 whl print 循環 下一個 sys 三種 iterator for 1、for循環 代碼實現: for(int i=0;i<list.size();i++){ product p=list.get(i); System.println(p); } 2、叠

二叉樹求第序列

btree har dex logs 由於 bsp int tin 推理 // 樹的結點的結構: struct TreeNode{ TreeNode* LChild; TreeNode* RChild; char data; };

Python --- 二叉樹的層序建立與

隊列 方式 span 等於 不存在 pos 同時 紅色 ret 二叉樹(Binary Tree)時數據結構中一個非常重要的結構,其具有。。。。(此處省略好多字)。。。。等的優良特點。 之前在刷LeetCode的時候把有關樹的題目全部跳過了,(ORZ:我這種連數據結構都不會的

二叉樹的簡單版

putchar 中序遍歷 ret pri pos 後續遍歷 同學 alloc erro 同學突然向我問二叉樹的三種遍歷代碼。數據結構剛剛學了,自己很吃力的敲了出來。 和老師演示的代碼有很大差距。 #include <stdio.h>#include <

List集合方法

++ next string highlight gpo equal 方法 arraylist bject 一、通過叠代來遍歷List集合,可以刪除List集合中的元素。 import java.util.ArrayList; import java.util.Itera

談談vector容器的方法

封裝 font pri using != 說明 ace rac 三種 說明:本文僅供學習交流。轉載請標明出處。歡迎轉載! ? ? ? ? ?vector容器是最簡單的順序容器,其用法相似於數組。實際上vector的底層實現