2016-01-22 52 views
0

給定一個圖像組成的一個簡單的黑色領域與一個單一的白色矩形裏面,我怎麼能提取矩形的座標?我搜索了谷歌搜索,並發現了許多關於使用霍夫線,卷積,形態學等邊緣檢測的文章,但所有這些實際上都會影響圖像或以某種方式進行轉換。我不想改變圖像,我想要做的就是找到邊緣。很明顯,我可以簡單地遍歷整個圖像的寬度和高度,並查看像素顏色(如一些帖子所示),但這看起來非常低效。有沒有內置算法?似乎這一定是imagick某個地方的一部分,否則它怎麼可能找到並畫出內部圖像的邊緣?但我很難找到如何解決這個問題。php - 如何使用imagick或其他庫找到圖像邊緣的座標?

回答

1
$base = new Imagick(realpath('./trim.png')); 
$base->trimImage(0); 
// get the new image size 
$geometry = $base->getImageGeometry(); 
// Retrieve the trim info 
$pageInfo = $base->getImagePage(); 

一個類似的例子是手動頁上: http://php.net/manual/en/imagick.trimimage.php#111332

+0

嗯 - 12.9k聲望和代碼專用答案? Mhhh,如果你可以添加一些單詞,會很好。 ([來自評論](http://stackoverflow.com/review/low-quality-posts/10996110)) –

+1

@CharlotteDunois我已經回答了109個問題,標記爲'Imagick',總的upvote計數爲... 84。其中一些答案花了幾個小時寫下來。我的答案可能很簡短,這不應該太令人驚訝。 – Danack

+0

謝謝丹達克,您的解決方案讓我走上正軌。實際上,還需要一步才能使其工作 - 手冊頁面註釋中提到的setImagePage()。所以完整的解決方案在下面(不能發佈在這裏,因爲'迷你降價'格式)。 –

0
它顯示爲貼到該問題的完整解決方案

如下:

$im->trimImage(0); 
$pagedata = $im->getImagePage(); 
$x = $pagedata['x']; 
$y = $pagedata['y']; 
$im->setImagePage(0, 0, 0, 0); 
$w = $im->width; 
$h = $im->height; 

沒有得到之前設置圖像頁面高度和寬度將返回整個原始圖像的高度和寬度,如參考頁面上的註釋所示。

事實證明,如果您使用的是使用透明度的圖像,解決方案會更容易;它只是單獨getImagePage()功能:

$im = new Imagick(realpath('./image.png')); 
$pagedata = $im->getImagePage(); 
$x = $pagedata['x']; 
$y = $pagedata['y']; 
$w = $pagedata['width']; 
$h = $pagedata['height']; 
print("x,y: $x, $y<br>\n"); 
print("w,h: $w, $h<br>\n"); 

出於某種原因,如果trimImage(0)與此透明圖像所用的(X,Y)座標設置爲(-1,-1)。不幸的是我對imagick說不清楚爲什麼會發生這種情況。也許你可以回答這個問題,@丹納克?

相關問題