[英]black and white Image processing in C#
(來源: googlepages.com )
在上面的圖像中,我想用紅色標記Circle的邊緣
(來源: googlepages.com )
我不知道該怎么辦,任何幫助/建議都會受到高度贊賞......
快速而骯臟的解決方 逐個像素地運行圖像,如果顏色發生變化,只需將像素塗成紅色即可。
PS:注意這可能不適用於正方形,除非你在垂直和水平方向上做同樣的事情
只要您使用二進制圖像(如您提供的二進制圖像),形態過濾就會很好。 擴大圖像然后減去原始圖像。
alt text http://img29.imageshack.us/img29/1420/morphf.png
這是一個MATLAB示例:
lImage = zeros(19, 19, 3);
lImage(7:13, 7:13, :) = repmat( ...
[0 0 1 1 1 0 0; ...
0 1 1 1 1 1 0; ...
1 1 1 1 1 1 1; ...
1 1 1 1 1 1 1; ...
1 1 1 1 1 1 1; ...
0 1 1 1 1 1 0; ...
0 0 1 1 1 0 0;], [1 1 3]);
figure; imshow(lImage);
lOutline = imdilate(lImage, strel('disk', 1)) - lImage;
lOutline(:, :, 2:3) = 0;
figure; imshow(lImage + lOutline);
您幾乎肯定想要使用Canny Edge Detector ,它應該能夠輕松完成。 我公司的產品線包括這樣一個工具,這是運行它的輸出: alt text http://www.plinth.org/_images/image1Output.gif
您正在尋找的是邊緣檢測。 您可以在Google上找到適用於常規算法的大量資源:
我至少可以指向一些漂亮的邊緣檢測過濾器: http : //www.codeproject.com/KB/GDI-plus/edge_detection.aspx
我想它應該適合你
從來沒有做過這樣的事情,但是復雜圖像處理的強大工具是:
http://www.imagemagick.org/script/index.php
大量文檔和示例 - 如果您不想調用可執行文件,還需要.NET包裝器。
有趣的問題 - 我假設你的例子中的'白色圓圈'實際上是另一個圖像 - 這意味着你不是自己畫圓圈的?
如果是這樣,您可以掃描所有像素以找到在其至少一側上具有黑色的白色像素(4個方向或8個包括角)。 如果匹配則將其交換為紅色。 如果沒有,那么忽略它。
我懷疑這是最好的方法,但如果它只是黑色和白色,這可能會讓你開始。
最終你想要編輯圖像的像素。 Marc Gravell已經在這里回答了這個問題。
然后,根據您選擇的選項LockBits或GetPixel / SetPixel,您需要循環查看每像素顏色值。 保持循環直到你碰到一個白色像素。
完成后,檢查周圍的所有方向,如果找到黑色像素,則將該白色像素的顏色設置為紅色。 這當然是最簡單的答案,並且有一些方法可以優化它,但它會起作用。
例如,如果您想將顏色更改為僅限於四個直接相鄰的像素,則可以,而不是檢查對角線。
邊緣檢測? 圖像處理? OpenCV ! lib有C#包裝器。 不是“簡單”的解決方案,但是使用此lib獲得的任何exp都是一個很好的簡歷構建器。 如果你的公司正在進行圖像處理,他們可能已經在使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.