1.建立兩個陣列裝每個圖點的值2.ptr1放原始圖的值3.ptr2放新建立的圖的值4.以HW4來說,是可以互換的因為圖並沒有用到彩色的圖老師說過黑白是1byte彩色是3byte如果使用的是彩色的圖,就不能互換以上是我的想法...對不對的話..沒啥把握ˊˋ"
Ps.網誌的時間怪怪的...是不是沒有選到台灣的時區?
ptr1跟ptr2都是宣告陣列來放圖片中的位元.ptr1 是先將原本的圖片 先放到 ptr1所做的未宣告的 字元陣列裡面ptr2是把轉換過後的圖片的值放到這陣列第一個loop是依序用ptr1的height(行數)第二個loop是將ptr1每一列的pixel作轉換bw->width是以色彩度 黑白就是1,彩色就是3bw->widthStep 是以記憶體的容量來看的因為這張圖片是將黑白轉白黑 都為 1 所以可以互換如果有講錯 請多包涵
看的還不是很懂@@不過看了上面的講解 大概知道其意思~之後再繼續研究@@"
我是黃世育 以上同學對問題所提出的意見 都有些問題這個地方 不能大概了解每個字句 每個細節 都很關鍵我要對 有發表意見的同學 鼓勵一下老師的話 你有聽進去我也要 請沒有發表意見的同學 思考一個問題你對這個專研有熱情嗎 若有的話 老師說的 你就要做到若沒有的話 有兩個選項一是 找另外的老師二是 跟我說清楚 你沒興趣 我也可以放牛吃草的這是我跟你們相處這幾個星期以來的感想同學們 要認真思考 以上的問題
// Get blue pixelsfor (int y=0; yheight; y++) {uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);uchar* ptr2=(uchar*) (bImg->imageData +y*bImg->widthStep);for (int x=0; xwidth; x++) {ptr2[3*x]=ptr1[3*x];ptr2[3*x+1]=0;ptr2[3*x+2]=0;這個程式中,for迴圈是什麼意思?為什麼要ptr2[3*x]=ptr1[3*x];ptr2[3*x+1]=0;ptr2[3*x+2]=0;看不懂@@
可能剛接觸對這方面的程式看的都不是很了解不過看完同學的分享多少了解一些自己還要多加油對於bw->width 是以色彩度 黑白就是1,彩色就是3那天老師下課有提到彩色轉黑白 * 1/3黑白不能轉彩色不知道自己是否有記錯
程式中 ptr1, ptr2 有何作用 ???->這兩個分別都是建立一個新的空間好讓image的data可以寫入進去ptr1 在程式第一層 for loop 時 意義為何 ???->是跑圖的高,以一個高為一單位分別用入到ptr1的高裡其寫入方式為:-> -> ->ptr1 在程式第二層 for loop 時 意義為何 ???->是跑圖的寬,以一個寬為一單位分別用入到ptr1的寬裡其寫入方式為:| | | | ˇ ˇ ˇ ˇbw->width, bw->widthStep 有何不同->兩著均是跟圖的寬有關,只是說width是以一個(W or B)為一單位而widthstep是以三個(BGR)為一單位 而此次作業是剛好黑白,因此用這兩個是沒什麼太大的差別 程式中 bw->width 與 bw->widthStep 可互換嗎 ??? 舉個例子->若是以黑白來說,當然是可以互換的
一張圖是由許多點組成的,那也是就是說用width就是可以用來顯示點在陣列裡每一個點的位置嗎?而widthStep是圖片的每一列第一個元素嗎?
一張圖是由許多點組成的,那也是就是說用width就是可以用來顯示點在陣列裡每一個點的位置嗎?而widthStep是圖片的每一列第一個元素嗎?沒錯,一張圖是有許多點組成的,透過Heigth和Width我們可以選定要抓的Pixel資料所以抓影像的資料時,可先透過Heigth來指定要抓第幾列的資料,在透過Width來抓第幾行的資料Width是一張影像的寬,而widthStep則是影像在記憶體中一列影像資料的空間/長度所以如果是一張彩色影像記憶體會以(g1,b1,r1),(g2,b2,r2),(g3,b3,r3).....(gn,bn,rn)的方式儲存而黑白影像應該是b1,b2,b3,b4.....,bn (這個我就不太確定啦)因此,在讀一張彩色影像的時候要用width去讀資料的話,要以3的倍數去讀取,widthStep就不用啦,而黑白影像用誰就沒差了
延伸:用一層 for loop 完成以上所有動作將一張影像作 鏡射 (Mirror) 一層 for loop 還沒弄完啦不過兩層的鏡射OK了啦 Width-X 就行了
1.建立兩個陣列裝每個圖點的值
回覆刪除2.ptr1放原始圖的值
3.ptr2放新建立的圖的值
4.以HW4來說,是可以互換的
因為圖並沒有用到彩色的圖
老師說過黑白是1byte彩色是3byte
如果使用的是彩色的圖,就不能互換
以上是我的想法...
對不對的話..沒啥把握ˊˋ"
Ps.網誌的時間怪怪的...是不是沒有選到台灣的時區?
回覆刪除ptr1跟ptr2都是宣告陣列來放圖片中的位元.
回覆刪除ptr1
是先將原本的圖片 先放到 ptr1所做的未宣告的 字元陣列裡面
ptr2
是把轉換過後的圖片的值放到這陣列
第一個loop是依序用ptr1的height(行數)
第二個loop是將ptr1每一列的pixel作轉換
bw->width是以色彩度 黑白就是1,彩色就是3
bw->widthStep 是以記憶體的容量來看的
因為這張圖片是將黑白轉白黑 都為 1 所以可以互換
如果有講錯 請多包涵
看的還不是很懂@@
回覆刪除不過看了上面的講解 大概知道其意思~
之後再繼續研究@@"
我是黃世育
回覆刪除以上同學對問題所提出的意見 都有些問題
這個地方 不能大概了解
每個字句 每個細節 都很關鍵
我要對 有發表意見的同學 鼓勵一下
老師的話 你有聽進去
我也要 請沒有發表意見的同學 思考一個問題
你對這個專研有熱情嗎
若有的話 老師說的 你就要做到
若沒有的話 有兩個選項
一是 找另外的老師
二是 跟我說清楚 你沒興趣 我也可以放牛吃草的
這是我跟你們相處這幾個星期以來的感想
同學們 要認真思考 以上的問題
// Get blue pixels
回覆刪除for (int y=0; yheight; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (bImg->imageData +y*bImg->widthStep);
for (int x=0; xwidth; x++) {
ptr2[3*x]=ptr1[3*x];
ptr2[3*x+1]=0;
ptr2[3*x+2]=0;
這個程式中,for迴圈是什麼意思?
為什麼要
ptr2[3*x]=ptr1[3*x];
ptr2[3*x+1]=0;
ptr2[3*x+2]=0;
看不懂@@
可能剛接觸
回覆刪除對這方面的程式
看的都不是很了解
不過看完同學的分享
多少了解一些
自己還要多加油
對於
bw->width 是以色彩度 黑白就是1,彩色就是3
那天老師下課有提到
彩色轉黑白 * 1/3
黑白不能轉彩色
不知道自己是否有記錯
程式中 ptr1, ptr2 有何作用 ???
回覆刪除->這兩個分別都是建立一個新的空間好讓image的data可以寫入進去
ptr1 在程式第一層 for loop 時 意義為何 ???
->是跑圖的高,以一個高為一單位分別用入到ptr1的高裡
其寫入方式為:->
->
->
ptr1 在程式第二層 for loop 時 意義為何 ???
->是跑圖的寬,以一個寬為一單位分別用入到ptr1的寬裡
其寫入方式為:| | | |
ˇ ˇ ˇ ˇ
bw->width, bw->widthStep 有何不同
->兩著均是跟圖的寬有關,只是說width是以一個(W or B)為一單位
而widthstep是以三個(BGR)為一單位 而此次作業是剛好黑白,因此用這兩個是沒什麼太大的差別
程式中 bw->width 與 bw->widthStep 可互換嗎 ??? 舉個例子
->若是以黑白來說,當然是可以互換的
一張圖是由許多點組成的,
回覆刪除那也是就是說用width就是可以用來顯示點在陣列裡每一個點的位置嗎?
而widthStep是圖片的每一列第一個元素嗎?
一張圖是由許多點組成的,
回覆刪除那也是就是說用width就是可以用來顯示點在陣列裡每一個點的位置嗎?
而widthStep是圖片的每一列第一個元素嗎?
沒錯,一張圖是有許多點組成的,透過Heigth和Width我們可以選定要抓的Pixel資料
所以抓影像的資料時,可先透過Heigth來指定要抓第幾列的資料,在透過Width來抓第幾行的資料
Width是一張影像的寬,而widthStep則是影像在記憶體中一列影像資料的空間/長度
所以如果是一張彩色影像記憶體會以
(g1,b1,r1),(g2,b2,r2),(g3,b3,r3).....(gn,bn,rn)的方式儲存
而黑白影像應該是
b1,b2,b3,b4.....,bn (這個我就不太確定啦)
因此,在讀一張彩色影像的時候要用width去讀資料的話,要以3的倍數去讀取,widthStep就不用啦,而黑白影像用誰就沒差了
延伸:
回覆刪除用一層 for loop 完成以上所有動作
將一張影像作 鏡射 (Mirror)
一層 for loop 還沒弄完啦
不過兩層的鏡射OK了啦 Width-X 就行了