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 (파이썬 이미지 라이브러리)를 사용
- .
입력 및 출력의 예를 통해 좀 더 명확하게 요구 사항을 설명해야한다고 생각합니다. 얼마나 많은 회색 값을 원하십니까? 원본 이미지가 흑백이나 컬러입니까? 그런 종류의 일. Elsewise 나는 당신의 보너스가 낭비 될 것 같아요. –
좋아요, 질문을 업데이트 드리겠습니다 – Alaa