1. 程式人生 > >影象區域性與分割(一)

影象區域性與分割(一)

OpenCV中的取樣函式cvInitLineIterator()和CV_NEXT_LINE_POINT(),可以很容易對任意直線上的畫素進行取樣。

CVAPI(int)  cvInitLineIterator(const CvArr* image,CvPoint pt1, CvPoint pt2,

                                CvLineIterator* line_iterator,

                                int connectivityCV_DEFAULT(8),

                                int

left_to_rightCV_DEFAULT(0));

輸入引數image可以是任意資料型別和任何通道數

點pt1和pt2是線段的兩個端點。

迭代器line_iterator說明直線上兩個畫素之間的移動步長。

如果影象是多通道的,每次呼叫CV_NEXT_LINE_POINT()函式都使line_iterator指向下一個畫素。

每個通道的畫素值可同時用line_iterator.ptr[0],line_iterator.ptr[1],line_iterator.ptr[2]依次得到。

下面看一個具體應用:

從一個視訊檔案中讀取所有畫素的GRB值,收集這些數值並將其分成三個檔案。

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

#define CVX_RED   CV_RGB(0xff, 0x00, 0x00)
#define CVX_GREEN CV_RGB(0x00, 0xff, 0x00)
#define CVX_BLUE  CV_RGB(0x00, 0x00, 0xff)

int main()
{
    /*1、載入一個視訊*/
    const char videoname[] = "/Users/linwang/LinMovie/Wolf.mp4";
    //通過引數設定要讀取的檔案,返回一個指向capture的結構指標
    CvCapture * capture = cvCreateFileCapture(videoname);
    
    /*2、設定相關變數*/
    int max_buffer = 0;  //返回直線上迭代的點的個數
    IplImage * rawIamge;
    CvLineIterator iterator;   //迭代器
    
    /*3、準備寫入檔案*/
    FILE * ftprb = fopen("blines.csv","w");
    FILE * ftprg = fopen("glines.csv","w");
    FILE * ftprr = fopen("rlines.csv","w");
    CvPoint pt1 , pt2;
    for(;;)
    {
        //從攝像頭或視訊抓去幀
        if(!cvGrabFrame(capture))
        {
            break;
        }
        //取回由函式抓取的影象
        rawIamge = cvRetrieveFrame(capture);
        //返回線上迭代的點的個數
        max_buffer = cvInitLineIterator(rawIamge, pt1, pt2, &iterator);
        
        for(int j = 0;j<max_buffer;j++)
        {
            fprintf(ftprb, "%d,",iterator.ptr[0]);
            fprintf(ftprg, "%d,",iterator.ptr[1]);
            fprintf(ftprr, "%d,",iterator.ptr[2]);
            
            iterator.ptr[2] = 255;         //red做一個標記
            CV_NEXT_LINE_POINT(iterator);  //迭代到寫一個畫素
        }
        fprintf(ftprb, "/n");
        fprintf(ftprg, "/n");
        fprintf(ftprr, "/n");
    }
    fclose(ftprb);
    fclose(ftprg);
    fclose(ftprr);
    
    cvReleaseCapture(&capture);
}


相關推薦

影象區域性分割

OpenCV中的取樣函式cvInitLineIterator()和CV_NEXT_LINE_POINT(),可以很容易對任意直線上的畫素進行取樣。 CVAPI(int)  cvInitLineIterator(const CvArr* image,CvPoint pt1

影象特徵描述匹配——BRIEF特徵點描述匹配

         傳統的特徵點描述子如SIFT,SURF描述子,每個特徵點採用128維(SIFT)或者64維(SURF)向量去描述,每個維度上佔用4位元組,SIFT需要128×4=512位元組記憶體,SURF則需要256

眼底影象血管增強分割--2Gabor濾波演算法原理及實現

Gabor濾波演算法 維基裡給出的解釋,“In image processing, aGabor filter is a linear filter used fortextureanalysis,

基於 keras的全卷積網路u-net端到端醫學影象多型別影象分割

有醫院的朋友,需要幫忙完成一個影象分割的任務,提供了一些資料,看了下資料,灰度圖,覺得設計特徵再做分割太麻煩。直接整神經網路吧。不用費神設計特徵,省事,畢竟只是幫個忙而已。 1. 查詢方案 顯然,這個任務,早有前人做過無數次了,這麼熱點的領域,簡直一搜一大把。搜尋結

影象分割Contour Detection and Hierarchical Image Segmentation

三個部分: gPb: global probability of boundary OWT: Oriented Watershed Transform UCM: Ultrametric Contour Map 針對各個畫素,計算其作為邊緣的權值(可能性)

Tomcat--安裝部署

實現 get original servle body public -- ont str 一、Tomcat背景   自從JSP發布之後,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發以後,開始考慮在SUN的JSWDK基礎上開發一個可以

JVM中class文件探索解析

範圍 protected test except itl 指向 strac 相關 父類索引 一直想成為一名優秀的架構師的我,轉眼已經工作快兩年了,對於java內核了解甚少,閑來時間,看看JVM,吧自己的一些研究寫下來供大家參考,有不對的地方請指正。 廢話不多說,一起來看看J

內核調試神器SystemTap — 簡單介紹使用

kprobe utils its preview response art sym about output a linux trace/probe tool. 官網:https://sourceware.org/systemtap/ 簡單介紹 S

三維渲染引擎設計時間

註冊 三維 特定 渲染引擎 交互 文件 集合 工具 調度 一、初始osg 三維渲染引擎:為了實現三維場景圖形的結構管理和繪制而提供的一系列API的集合。包括構建層和交互層。 Crystal Space、Java3D、Unreal…… osg庫:構件場景圖形的場景圖形節點類、

機器學習之SVM初解淺析:最大距離

機器學習 svm 最大距離 2 / ||w|| 這段時間在看周誌華大佬的《機器學習》,在看書的過程中,有時候會搜搜其他人寫的文章,對比來講,周教授講的內容還是比較深刻的,但是前幾天看到SVM這一章的時候,感覺甚是晦澀啊,第一感覺就是比較抽象,特別是對於像本人這種I

機器學習之SVM初解淺析:

機器學習 svm 最大距離 2 / ||w||sdsshngshan‘gccha 這段時間在看周誌華大佬的《機器學習》,在看書的過程中,有時候會搜搜其他人寫的文章,對比來講,周教授講的內容還是比較深刻的,但是前幾天看到SVM這一章的時候,感覺甚是晦澀啊,第一感覺就

WPF入門教程系列六——布局介紹Canvas

mouse 建議 geo 自動調整 範圍 添加 ges ans colors 從這篇文章開始是對WPF中的界面如何布局做一個較簡單的介紹,大家都知道:UI是做好一個軟件很重要的因素,如果沒有一個漂亮的UI,功能做的再好也無法吸引很多用戶使用,而且沒有漂亮的界面,那麽普通用

MySQL系列:基於binlog的增量訂閱消費

clas 需要 val tro ali cat tor rip 變化   在一些業務場景中,像在數據分析中我們有時候需要捕獲數據變化(CDC);在數據審計中,我們也往往需要知道數據從這個點到另一個點的變化;同樣在實時分析中,我們有時候需要看到某個值得實時變化等。 要解決以上

SQL註入漏洞的分析利用

ces mysql 得出 必須 排序 快速搭建 oracle 學習筆記 min SQL註入的核心思想 黑客在正常的需要調用數據庫的URL後面構造一段數據庫查詢代碼,然後根據返回的結果,從而獲得想要的某些數據。SQL結構化查詢語言,絕大多數關系型數據庫(MySQL、Acces

Kotlin學習實踐 基礎

eat 代碼塊 數據 eas 特性 neu 簡潔 跟著 pla 1、 函數和變量 直奔主題不啰嗦 * a.關鍵字 fun 用來聲明函數。* b.參數的類型寫在參數名字的後面。* c.函數可以定義再文件的最外層,不需要把它放入類中。* d.數組就是類。 和Java不同Kotl

SSH原理運用:遠程登錄

獲得 回車 you 密碼登錄 很難 windows 註釋 設備 範圍 SSH是每一臺Linux電腦的標準配置。 隨著Linux設備從電腦逐漸擴展到手機、外設和家用電器,SSH的使用範圍也越來越廣。不僅程序員離不開它,很多普通用戶也每天使用。 SSH具備多種功能,可以用於很多

hadoop雲盤client的設計實現

white 下一跳 -c 文件 。。 edi track ++ ava 近期在hadoop雲盤client項目。在做這個項目曾經對hadoop是一點都不了解呀,在網

Docker學習實踐

docker一、docker的安裝 1.依賴包安裝 yum install -y yum-utils device-mapper-persistent-data lvm2 2.添加yum源 yum-config-manager --add-repo https://mirrors.ustc.edu.cn/do

大數據入門第十九天——推薦系統mahout入門概述

tps font 解決 技術分享 tar nbsp mage cnblogs clas 一、推薦系統概述   為了解決信息過載和用戶無明確需求的問題,找到用戶感興趣的物品,才有了個性化推薦系統。其實,解決信息過載的問題,代表性的解決方案是分類目錄和搜索引擎,如hao123

mysql數據庫索引優化實踐

都是 分鐘 必備 範圍查詢 無法使用 RM strong span 實踐 前言 mysql數據庫是現在應用最廣泛的數據庫系統。與數據庫打交道是每個Java程序員日常工作之一,索引優化是必備的技能之一。 為什麽要了解索引 真實案例 案例一:大學有段時間學習爬蟲,爬取了知乎30