線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2441
推到 Plurk!
推到 Facebook!

框出傾斜的正方形,並拷貝正方形內容

尚未結案
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-01 17:49:37 IP:163.13.xxx.xxx 未訂閱
大家好: 如圖右,我根據兩個黑點的距離,定義出一正方形. 只要找到那兩個黑點就可以框出對應的正方形...    現在如左圖~找到兩點...但兩點連線不是水平的 請問要怎麼框出相對的正方形並把~正方形內容拷貝成另一張影像 麻煩大家嚕 大家好: 我是程式設計的菜鳥~很多不懂之處,還請大家幫忙唷^^ ~謝謝你 發表人 - smilebye 於 2005/04/01 17:55:35
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-01 18:47:28 IP:140.129.xxx.xxx 未訂閱
smilebye 您好:    其實這跟把正方形影像旋轉一個角度的問題相當。 由您的描述大概知道您可以找到您所要正方形的中心點。 這時只要再以此中心點為圓心將該斜正方形中的像素轉成正方向即可。 有了兩點的資料要算出需要旋轉的角度應該不難。    您參考看看!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-01 18:55:44 IP:61.222.xxx.xxx 未訂閱
1. 計算出正方形的角度。 這應該不難推算,算出兩點距離與垂直座標參考點連至另一點。 相差即為角度。 2. 有意思!應該不是很難,練習一下吧!
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-01 21:01:31 IP:220.135.xxx.xxx 未訂閱
不好意思阿兩位...我PO錯版了 要PO在BCB的...我改去那邊PO嚕 那邊再討論吧!(ps.我不大懂兩位說的...兩個眼睛連線跟水平線夾角,這可以算出...然後怎麼知道對應的正方形裡面所有點呢?) 大家好: 關於程式設計~我有很多不懂之處,請大家多幫忙唷^^ ~謝謝~
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-02 01:05:12 IP:219.86.xxx.xxx 未訂閱
1. 先求出方形的重心(中心點),旋轉樞紐中心。 2. 參考圖形旋轉的範例。 依照所求出的差異角度,為選轉角度。 如: PY := Trunc(2*(y-Centery) 1); for X:=0 to Width-1 do begin px :=Trunc(2*(x-CenterX) 1); fx :=(((px*cAngle-py*sAngle)-1)/ 2 Centerx) - xDiff; fy :=(((px*sAngle py*cAngle)-1)/ 2 Centery) - yDiff; ..... 詳細去找個 BCB 的範例,就很清楚了。 斟酌參考看看吧!
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-02 15:06:32 IP:211.76.xxx.xxx 未訂閱
smilebye 您好:    因著您的提問,覺得這個問題可以應用在某些我感興趣的題目上,所以我實作了部分的功能,順便與您分享。 相關推導,實際影像與螢幕座標的關係,您可參考程式碼。    程式的使用說明如下: 1.利用滑鼠在影像上任點兩點您感興趣的所在。因為我設定的規則是採逆時針方式給定選取點的位置,因此點選的順序不同會畫出不同方向的圖形。 2.按下 rotate 按鈕即可得到轉換後的結果。    程式連結如下: http://delphi.ktop.com.tw/loadfile.php?TOPICID=21371966&CC=477974 程式中選用了華視主播王欣怡小姐的照片,由於此照片中正好王主播的頭向右偏了一下,此處僅為影像處理而使用,特此說明與致謝! RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-05 01:13:57 IP:61.228.xxx.xxx 未訂閱
RichTop 你好: 我想請問一下取中心點的函式getCenter() 中心點的xy座標爲什麼這樣取?看很久想不通還有scale代表什麼意思? 
 void getBlockImage(TCanvas *canvas, TImage *image, TPointf pc, int size, float angle)
{ float sx, sy, cx, cy, cosine, sine;
  int imgW, imgH;      imgW = image->Picture->Width;
  imgH = image->Picture->Height;
  cx = pc.x;  cy = pc.y;
  cosine = cos(angle*Deg2Rad);
  sine   = sin(angle*Deg2Rad);
  for (int y=-size; y<=size; y  )
     { for (int x=-size; x<=size; x  )
          { sx = cx   (x*cosine - y*sine  );
            sy = cy   (x*sine     y*cosine);
            sy = imgH - sy;
            if ( sx<0 || sx>=imgW || sy<0 || sy>=imgH )
              canvas->Pixels[size x][size-y] = RGB(255,0,0);
            else
              canvas->Pixels[size x][size-y] = image->Picture->Bitmap->Canvas->Pixels[sx][sy];
          }
     }
}
還有這邊拷貝到新圖,紅色部份的索引值在新圖中不是[0][0]開始填嗎? 怎變成[0][2*size] 大家好: 關於程式設計~我有很多不懂之處,請大家多幫忙唷^^ ~謝謝~
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-05 15:16:34 IP:211.76.xxx.xxx 未訂閱
smilebye 您好:    1.中心點的求算: 2.scale的作用是當如果要找眼睛連線下 scale*d 處的中心點時使用的。 所以以您的例子,scale=1。 3.因為是將找到的中心點當成正方形的中心點,以便利用相對位置的座標算出轉換回影像pixel所在的位置,這樣才能正確找到每一點對應到影像的顏色值。 由於螢幕座標與真正圖形像素的位置,並不全等,所以需要位移與翻轉(y方向)。 試著將x,y的邊界值代入,應該比較能了解我的說法。 這是我的思考習慣,或許還有其他的表示法,您參考一下。 RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2005/04/05 15:38:50
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-06 16:09:33 IP:163.13.xxx.xxx 未訂閱
RichTop你好:
引言: 2.scale的作用是當如果要找眼睛連線下 scale*d 處的中心點時使用的。 所以以您的例子,scale=1。 3.因為是將找到的中心點當成正方形的中心點,以便利用相對位置的座標算出轉換回影像pixel所在的位置,這樣才能正確找到每一點對應到影像的顏色值。 由於螢幕座標與真正圖形像素的位置,並不全等,所以需要位移與翻轉(y方向)
請問一下中心點指的是正方形中心嗎?如果是的話scale的作用是當如果要找眼睛連線下 scale*d 處的中心點那scale怎麼不是0.5? 關於3.中, 是不是就是從正方形的左下角開始一次一列 由下scan到上?所以將剪下來的圖片秀在canvas上時, 座標才會是由下往上填(y從2size,2size-1,,,,0)? 還有size指的就是兩眼連線的歐氏距離嗎? 謝謝大家不嫌麻煩地幫忙~ 大家好: 關於程式設計~我有很多不懂之處,請大家多幫忙唷^^ ~謝謝~
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-06 21:48:17 IP:211.76.xxx.xxx 未訂閱
smilebye 您好:    由於我並沒有依您所給的資料假設相關的變數,真是對不起! >
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-07 01:10:42 IP:220.135.xxx.xxx 未訂閱
非常謝謝RichTop大哥的解答,不嫌麻煩地解惑...問題解決了! 也讓我學到不少東西...真是個值得學習的對象~ 也謝謝wameng的幫忙!  謝謝你們~ 大家好: 關於程式設計~我有很多不懂之處,請大家多幫忙唷^^ ~謝謝~
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
系統時間:2024-05-04 10:23:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!