Re: opencv vc++2008 像素MAPPING問題

看板C_and_CPP作者 (烏龜也會飛)時間13年前 (2010/11/23 13:41), 編輯推噓2(2010)
留言12則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《ericinttu (腿力爆增 XD)》之銘言: : 標題: Re: opencv vc++2008 像素MAPPING問題 : 時間: Tue Nov 23 12:24:19 2010 : : ※ 引述《HaloShell (烏龜也會飛)》之銘言: : : 我想要作的事情如下: : : 1.用WEBCAM讀取一個影像 : : 2.把讀取到的影像裡的像素的位置作調換 : : 拿最簡單的案例 比如說 : : 一張影像有左上 右上 左下 右下 四塊方形的面積 : : 我要將影像原本左下的方塊 搬到右上 右上搬到左下 右下搬到左上.. : : 並不是以中心點作軸進行對稱 只是單純像把圖像拆成四塊拼圖 然後重組而已 : : 印象中有image copy with specified region : 應該可以不用一個個pixel搬 : : : 3.輸出此重組的新影像(寫成檔案或顯示) : : 我遇到的問題是: : : 1.我想查指令 : : 但不知道要怎麼查 有上willowgarage和yahoo!opencv社群以及opencv china : : 但還沒上手 麻煩指點查指令的方法 : google "opencv" , 大陸的 Opencv China 資料豐富 : 我國的 昨日網站 例子淺顯易懂 : : 找指令的話, 看你有沒有 Intel/O'Reilly/Opencv中文教程 的電子書檔. : (後兩本的封面可在 Opencv China 首頁看到) : 從你要的章節下去找指令吧. : 不過基本的讀圖檔, 寫圖檔, 灰階化, 二值化, 等等的指令也都可以利用 : google+特定字找到 : : : 2.確切的說 我想問如何讀取擷取到的影像當中特定位置的rgb像素 : : 並且把這像素值 寫入新的影像中該佔的位置 : : 2.1. 請問讀取rgb像素的指令 : IplImage *inputImage = cvLoadImage("你要的路徑",1); : ↑1為讀入彩圖 : int b = (unsigned char)inputImage->imageData[(y*inputImage->width+x)*3+0]; : int g = +1 ; : int r = +2 ; : : x for 左上角(0,0) 往右數來第幾個 pixel : y 下 : : : 2.2. r g b在IplImage的資料結構裡是怎麼排序的? : 已經有人推文了. : bgrbgr : : : 2.3. 寫入的rgb像素的指令 : inputImage->imageData[(y*inputImage->width+x)*3+0] = (要放入的blue value); : +1 green ; : +2 red ; : : 謝謝 : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.4.170 : 推 glennchen:應該是 inputImage->widthStep 喔 11/23 13:21 感謝兩位 0. 延續上文的問題以及ericinttu兄的詳盡回應 我想確認 所以 IplImage內的第一個像素(或是說index=0的像素) 就是整張圖片裡最左上角落的藍色像素值嗎? 上文問的2.1.與2.3.特指某一位置的像素做抽取 我想再請問 可否把rgb存成矩陣的形式 像matlab那樣 這樣一來我只要在紙上推算出input和output的位置轉換式 就可以用短短兩三個式子做全部的區域般移 1. 再請問"widthStep"和"width"差異為何? // 從以下這段常用的程式碼 IplImage* SrcImage = cvLoadImage("FileName.jpg",1); CvSize ImageSize = cvSize(SrcImage->width,SrcImage->height); // ->width不也能採得影像資料的尺寸嗎 或是說widthStep的資料型態不同? 2. 見過的程式碼裡面 width前面有時接著的符號是"->" (即, SrcImage->width) 有時見到的是"." (即, SrcImage.width) 有什麼差別呢? 再次感謝板上各位的幫助 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 147.46.115.146

11/23 16:27, , 1F
結構指標 用 "->", 結構 用 ".", 可翻 c語言的書.
11/23 16:27, 1F

11/23 16:28, , 2F
width沒有包含channel數, widthStep有包含channel數.
11/23 16:28, 2F

11/23 16:29, , 3F
大部份程式語裡,圖形的起始點都是在左上角.
11/23 16:29, 3F

11/23 16:31, , 4F
左上角(0,0)這個位置, 依照channel數的不同因而取得不同
11/23 16:31, 4F

11/23 16:31, , 5F
的資訊.
11/23 16:31, 5F

11/23 16:33, , 6F
IplImage->imageData[], 它是一維陣列, 要把它當作一維
11/23 16:33, 6F

11/23 16:34, , 7F
矩陣看待也可以. 假如真的要用到矩陣運算的話, 再去找
11/23 16:34, 7F

11/23 16:34, , 8F
IplImage to cvMat 這方面的資料.
11/23 16:34, 8F

11/23 17:43, , 9F
widthstep是指一個row的byte大小
11/23 17:43, 9F

11/23 17:44, , 10F
又因為每row的byte數要為四的倍數,所以用widthstep
11/23 17:44, 10F

11/23 17:45, , 11F
會比width好我覺得是在這
11/23 17:45, 11F

11/23 18:20, , 12F
大感謝
11/23 18:20, 12F
文章代碼(AID): #1CwrFjB_ (C_and_CPP)
文章代碼(AID): #1CwrFjB_ (C_and_CPP)