<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      碼農干貨系列【4】--圖像識別之矩形區域搜索

      2012-07-23 07:37  【當耐特】  閱讀(9525)  評論(32)    收藏  舉報

      簡介

      定位某個圖片的矩形區域是非常有用的,這個可以通過手動的選擇某個區域來實現定位,圖片相關的軟件都提供了這個功能;也可以像本篇一個通過程序來實現智能定位。前者會有誤差,效率低下;后者選區精度高,效率高。

      應用場景

      1.精靈編輯器或者css sprites輔助工具(當我們需要逆著TexturePacker行事的時候),如下圖所示:

      image

      2.手寫識別輸入

      image image

      因為我們不能保證用戶輸入的區域,所以必須定位到用戶輸入的區域,再去識別用戶的輸入的內容。

      3.魔法畫板程序

      比如馬良神筆,要對用戶繪制的火柴人進行一些上下左右移動、扭曲等效果:

      image

      矩形區域識別

      廢話一萬句,不如一張圖。看下面這張圖:

      image

      這就是識別的關鍵。任意取圖像上的一點,然后通過這點開始擴張。一般情況下,該點取的是軟件使用者鼠標點擊的那一點。如圖是移動中的四個點:

      image

      可以看到,移動后的四個點可以確定一個矩形區域。哪條邊下的所有像素為透明(即0,0,0,0),則該點不移動,等待其他點移動完成。當所有邊下面的像素都為透明,則得到了我們想要的區域。我們根據移動的距離可以很方便的找到四個頂點:

      image

      所以一個遞歸就可以幫我們實現(js Canvas版):


      var increasePixel = 1, leftIncreasePixel = 2, rightIncreasePixel = 2, upIncreasePixel = 2, downIncreasePixel = 2;
      function searchTransparentRectByTargetPoint(p) {

      var p1 = { x: p.x - leftIncreasePixel, y: p.y - upIncreasePixel };
      var p2 = { x: p.x + rightIncreasePixel, y: p.y - upIncreasePixel };
      var p3 = { x: p.x + rightIncreasePixel, y: p.y + downIncreasePixel };
      var p4 = { x: p.x - leftIncreasePixel, y: p.y + downIncreasePixel };

      var breakTag = true;
      if (!isXLineTransparent(p1, p2)) {
      upIncreasePixel += increasePixel;
      breakTag = false;
      }
      if (!isYLineTransparent(p2, p3)) {
      breakTag = false;
      rightIncreasePixel += increasePixel;
      }
      if (!isXLineTransparent(p4, p3)) {
      breakTag = false;
      downIncreasePixel += increasePixel;
      }
      if (!isYLineTransparent(p1, p4)) {
      breakTag = false;
      leftIncreasePixel += increasePixel;
      }

      if (breakTag) {
      return [p1.x, p1.y, p3.x - p1.x, p3.y - p1.y];
      } else {
      return searchTransparentRectByCenterPoint(p);
      }
      }

      其中isXLineTransparent和isYLineTransparent是獲取該線段下面是否全透明。


      function isXLineTransparent(p1, p2) {
      var _y = p2.y;
      for (var i = p1.x; i < p2.x + 1; i++) {
      var startIndex = this.getImageDataStartIndexByPosition({ x: i, y: _y });
      var totalPixel = this.imageData.data[startIndex] + this.imageData.data[startIndex + 1] + this.imageData.data[startIndex + 2] + this.imageData.data[startIndex + 3];
      if (totalPixel !== 0) {
      return false;
      }
      }
      return true;
      }

      function isYLineTransparent(p1, p2) {
      var _x = p2.x;
      for (var i = p1.y; i < p2.y + 1; i++) {
      var startIndex = this.getImageDataStartIndexByPosition({ x: _x, y: i });
      var totalPixel = this.imageData.data[startIndex] + this.imageData.data[startIndex + 1] + this.imageData.data[startIndex + 2] + this.imageData.data[startIndex + 3];
      if (totalPixel !== 0) {
      return false;
      }
      }
      return true;
      }

      多矩形區域識別策略

      多矩形區域識別是沒有擴張點,需要從用戶輸入中隨機產生一個目標點,然后使用兩層遞歸(上面的代碼之外再嵌套一層)實現所有矩形區域的遍歷。

      image

      思路有了,是不是有想法把上面的手寫輸入改成支持多個文字?這個對于聰明的你,明顯不是問題。

      在線演示

      傳送門:http://www.spritecow.com/

      主站蜘蛛池模板: 国产免费又黄又爽又色毛| 国产91色综合久久免费| 性欧美videofree高清精品| 日本偷拍自影像视频久久| 大地资源网第二页免费观看| 成在线人免费视频| 斗六市| 国产熟女激情一区二区三区| 国产精品免费看久久久| 成人免费A级毛片无码片2022| 欧美一本大道香蕉综合视频| 爱情岛亚洲论坛成人网站| 久久免费观看午夜成人网站| 亚洲av综合av一区| WWW丫丫国产成人精品| 国产精品久久久久久久久久| 九九热在线精品视频首页| 亚洲中文久久久精品无码| 成人看的污污超级黄网站免费| 爱色精品视频一区二区| 精品久久久中文字幕人妻| 麻豆天美国产一区在线播放| 国产成人精品av| 亚洲av中文乱码一区二| 亚洲精品一区二区天堂| 久久久久久久久久久免费精品| 久热久精久品这里在线观看| 亚洲男人第一无码av网| 国产亚洲av产精品亚洲| 人妻日韩精品中文字幕| 亚洲第一精品一二三区| 国产亚洲av产精品亚洲| 亚洲色一区二区三区四区| 男人的天堂va在线无码| 常熟市| 亚洲av永久无码精品网站| 国产玖玖玖玖精品电影| 日韩黄色av一区二区三区 | 国精品无码一区二区三区在线蜜臀 | 日本熟妇色xxxxx日本免费看| 日本一区二区三本视频在线观看|