1

캡쳐 된 이미지의 그레이 스케일 객체를 객체 픽셀 (또는 객체 스타일 크기 조정과 같은 것) 블록을 나타내는 0 1의 행렬로 스크립팅하려고합니다. , 그러나 나는,회색조 이미지의 객체를 0 행 배열로 스크립팅하기 []

.NET이 바람직하고, 지능이나 오픈 소스 도구를 찾고 있어요 색의 등급에 따라

[업데이트 개체를 반복 확장 및 매트릭스를 작성하여 수동 처리를 상상할 수 , 자세한 내용을 설명]

원본 이미지는 색상이지만, 저는 변환 중입니다. 256 그레이 스케일로 변환 한 다음 검정색 또는 흰색으로 만 크기를 조정하려고합니다. 따라서 하루 끝에 흑백 1의 그림으로 변환하려면

다음 URL에 소프트웨어를 사용하여 제로 한 매트릭스라는 ImageMagick이 흑백 사진을 변환하는 방법에 대한 논의 :

http://studio.imagemagick.org/discourse-server/viewtopic.php?f=1&t=18433

통지 용의 얼굴 영상을 보여 주 제로 한 행렬!가 어떤 기술이나 오픈 소스 도구 저것을 저를 돕는 저것?

+1

입력 및 출력의 예를 통해 좀 더 명확하게 요구 사항을 설명해야한다고 생각합니다. 얼마나 많은 회색 값을 원하십니까? 원본 이미지가 흑백이나 컬러입니까? 그런 종류의 일. Elsewise 나는 당신의 보너스가 낭비 될 것 같아요. –

+0

좋아요, 질문을 업데이트 드리겠습니다 – Alaa

답변

3

Emgu OpenCV for .NET을 사용하면 다음과 같은 결과가 나타납니다.

using Emgu.CV; 
using Emgu.CV.CvEnum; 
using Emgu.CV.Structure; 
using System; 
using System.Drawing; 
using System.IO; 

using (Image<Bgr, Byte> img = new Image<Bgr, Byte>("MyImage.jpg")) 
{ 
    Matrix<Int32> matrix = new Matrix<Int32>(img.Width, img.Height); 

    for (int i = 0; i<img.Height;i++) 
    { 
     for (int j = 0; j<img.Width;j++) 
     { 
      if (img.Data[i,j,2] == 255 && 
       img.Data[i,j,1] == 255 && 
       img.Data[i,j,0] == 255) 
      { 
       matrix.Data[i,j] = 0; 
      } 
      else 
      { 
       matrix.Data[i,j] = 1; 
      } 
     } 
    } 

    TextWriter tw = new StreamWriter("output.txt"); 
    for (int i = 0; i<img.Height;i++) 
    { 
     for (int j = 0; j<img.Width;j++) 
     { 
      tw.Write(matrix.Data[i,j]); 
     } 
     tw.Write(tw.NewLine); 
    } 


} 

위의 스 니펫은 컬러 이미지를로드하고 흰색으로 0과 1을 갖는 행렬을 만듭니다. 로드 및 그레이 스케일 이미지로 작업하기 위해

Image<Bgr, Byte>Image<Gray, Byte>되고 비교는 단지 if (img.Data[i,j,0] == 255)을 단순화한다. 또한

, 당신은 같은 것을 사용하여 cvThreshold 방법을 사용 오츠의 임계 값을 사용할 수 있습니다 (흑백 그레이 스케일로 색의 변환)가 임계 값을 할 수있는 :

int threshold = 150; 
Image<Bgr, Byte> img = new Image<Bgr, Byte>("MyImage.jpg"); 
Image<Gray, Single> img2 = img1.Convert<Gray, Single>(); 
Image<Gray, Single> img3 = new Image<Gray, Single>(img2.Width, img2.Height); 
CvInvoke.cvThreshold(img2, img3, threshold, 255, THRESH.CV_THRESH_OTSU);  

다른 가능한 도구

    포함
  • convert (ImageMagick) 및 pnmoraw (netpbm) (예 : 스 니펫 convert lib/dragon_face.xbm pbm: | pnmnoraw)이 있습니다. 출력 데이터를 작성하는 화상 데이터를 반복하기 위해 특별히 getPixel와 방법 System.Drawing.Bitmap을 사용하여 출력 데이터
  • 쓰기 된 화상 데이터와 파이썬 IO 기능을 반복하고, C# IO 기능에 PIL (파이썬 이미지 라이브러리)를 사용
  • .
+0

정말 감사합니다, Emgu OpenCV 아주 좋습니다! 내가 시도해 볼게, 내 비슷한 경우에 유용 할만한 다른 비슷한 라이브러리 나 도구를 알고 있니? – Alaa