2016-10-24 8 views
-1

저는 레이저 커터를 사용하여 디자인을 자르는 회사에서 프로젝트를 진행하고 있습니다. 이 회사는 최근 고객이 원하는 이미지를 업로드 할 수있는 웹 사이트를 개발했습니다. 이미지에 인쇄 된 디자인을 자르려면 디자인이 스텐실이어야합니다. 그래서 이미지를 분석 할 수있는 소프트웨어를 작성하여 스텐실이 아닌 부분을 찾아야합니다. 디자인이 스텐실이 아닌 것으로 판명되면 시스템은 "스텐실 디자인 아님"과 같은 메시지를 출력해야합니다. 화이트 픽셀 그룹이 검은 픽셀 그룹으로 둘러싸인 곳을 이해하면 이것이 효과가있을 것이라고 생각합니다. 흰색 픽셀이 검은 픽셀로 완전히 둘러싸인 경우 디자인은 스텐실이 아닙니다. 흰색 픽셀이 검은 픽셀로 완전히 둘러싸여 있는지 확인할 수있는 소프트웨어를 어떻게 작성할 수 있는지 잘 모르겠습니다. 웹 사이트의 모든 이전 코드는 PHP로 작성되었으므로 PHP를 사용하는 것이 좋습니다. Wikipedia를 참조 - 간단히 말해서 사전스텐실이 아닌 부분을 찾기 위해 이미지를 분석 할 수있는 코드를 작성하는 방법은 무엇입니까?

This is an example of a valid and invalid stencil

+0

않았다 내 대답은 당신의 문제를 해결합니까?그렇다면 투표 수 옆의 빈 녹색 체크/체크 표시를 클릭하여 답변으로 수락하십시오. 그렇지 않은 경우, 나 또는 다른 누군가가 귀하를 더 멀리 도울 수 있도록 작동하지 않은 것을 말하십시오. 감사. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

+0

예, 귀하의 답변에 따라 문제가 분류되었습니다. 도와 주셔서 정말로 고맙습니다. 정말 감사. –

답변

3

에서 덕분에, 나는 당신의 질문은 아래 "홍수 채워진" 이미지가 될 수 있는지 여부에 온다 생각합니다. 난 그냥 보여주기 위해 명령 줄에서 ImageMagick를을 사용하고, 마젠타와 홍수가 채우기 경우

그래서, 당신은 그것을 볼 수 있도록 :

convert valid.png -threshold 50% -fill magenta -draw 'color 0,0 floodfill' result.png 

enter image description here

을 그리고 동일한 작업을 수행하는 경우

convert invalid.png -threshold 50% -fill magenta -draw 'color 0,0 floodfill' result.png 

enter image description here

: 잘못된 스텐실 이미지

그래서 홍수 채우기를하고 나중에 남아있는 흰색 픽셀이 있는지 확인하는 것이 해결책입니다. ImageMagick를 다시 그래서

: 충전 후 가장 밝은 픽셀이 검은 색 또는 답을 모르는 경우 실제 코드에서, 내가 흑인이 아닌 마젠타 때문에 그런 식으로 채울 것입니다, 나는 발견하기 만. 지금

convert valid.png -threshold 50% -fill black -draw 'color 0,0 floodfill' -format "%[max]" info: 
0 

및 잘못된 스텐실 : 하나 개의 작은 주름이

convert invalid.png -threshold 50% -fill black -draw 'color 0,0 floodfill' -format "%[max]" info: 
65535 

가 충전 후 밝은 픽셀 (0) 또는 흰색 (255 또는 65535) 블랙이면 블랙과 홍수 채우기 및 참조 - 왼쪽 위 픽셀이 흰색이 아니거나 검은 색 부분이 그림의 가장자리에 닿아 그림 가장자리를 흐르는 홍수 채우기를 멈 추면 그리고 두 가지 모두에 대한 간단한 해결책이 있습니다. 왼쪽 위의 픽셀이 흰색이고, "페인트"이 가장자리를 완전히 흐를 수 있기 전에 이미지 전체에 1 픽셀 너비의 흰색 테두리를 추가하면됩니다. 이미지 :

convert input.png -bordercolor white -border 1 .... <as before> ... 

PHP 버전

PHP하지 내 기본 프로그래밍 언어를 다른이있을 수 있으므로, 상황 만이 확인 작동하는 것 같다 일을 더 나은 방법 ...

<?php 
    # Load the input image and get its size 
    $name="invalid.png"; 
    $image=imagecreatefrompng($name); 
    $size=getimagesize($name); 

    # Threshold the image to only contain pure black and pure white 
    imagefilter($image,IMG_FILTER_GRAYSCALE); 
    imagefilter($image,IMG_FILTER_CONTRAST,-1000); 

    # Flood fill white areas with black 
    $black = imagecolorallocate($image,0,0,0); 
    imagefilltoborder($image,0,0,$black,$black); 

    $allblack=1; 
    # Scan the image and see if there are any non-black pixels 
    for($i=0;$i<$size[0];$i++){ 
     for($j=0;$j<$size[1];$j++){ 
     $thisColor = imagecolorat($image,$i,$j); 
     if($thisColor!=0){ 
      $allblack=0; 
      break; 
     } 
     } 
    } 

    printf("%s: %d\n",$name,$allblack); 

    # Write output image 
    imagepng($image,"result.png"); 
?> 
+0

답변 해 주셔서 감사합니다. 홍수 채우기를 듣는 것은 이번이 처음이지만 실제 효과가있는 것처럼 보입니다. PHP로 코딩하고 있기 때문에, PHP에는 flood-fill을 수행하는 내장 함수가 있습니까? 또한 임계 값을 50 %로 지정하는 이유와 PHP로 코딩 할 때이 임계 값을 어떻게 지정할 수 있습니까? –

+0

PHP에서'GD' 라이브러리를 사용하거나 PHP ImageMagick 바인딩을 사용할 수 있다면'imagefilltoborder()'가 필요합니다, 여기 http://www.phpimagick.com/Imagick/floodFillPaintImage –

+0

50 % 임계 값 세트 127 이상은 정확히 흰색이고 127 이하는 모두 검은 색입니다. 요점은 거의 흰색 인 픽셀, 즉 rgb (253,251,254)가 있으면 정확히 흰색이되고 홍수 채우기가 마젠타 색으로 표시됩니다. 반면에 rgb (253,251,254)를 놓으면 홍수가 채워지지 않습니다. . –