2017-12-01 4 views
1

에 CopyMakeBorder 기능의 대상 이미지에서 픽셀 값을 액세스 조금 약 <code>CopyMakeBorder</code> 기능, <p></p> 그냥 빨리 질문을하려면 여기 EmguCV 할 새로운 Emgu CV

대상 이미지의 픽셀 값에 액세스 있는가?

대상 이미지를 더 처리하고 싶지만 이미지에서 픽셀 값에 액세스하려고하면 0 (중앙 픽셀과 같이 0이 아닌 위치에서도) 0 만 반환합니다. Imshow를 사용했을 때 이미지 테두리가 완벽하게 처리되었음을 보여 주었지만 픽셀 값에 액세스하려고하면 문제가 지속되어 픽셀 위치가 어디에서나 0 만 유지됩니다.

이되어 있지 내가

사람이 명확하게 수 등 Threshold 기능과 같은 다른 EmguCV 기능에서 대상 이미지를 사용하려고 문제? 고마워요 !!

저는 VB.net을 사용하고 있습니다. 코드는 여기에 있습니다. (주말에는 워크 스테이션에서 떨어져서 코드를 기억하려고합니다. 아마도 대문자와 실수가있을 것입니다.하지만 당신이 좌우,

먼저 I 원본 이미지, 대상 이미지

Dim img As Image(Of Gray,Byte) = New Image (Of Gray, Byte)("myimage.jpg") 
Dim img1 As Image(Of Gray,Byte) = New Image (Of Gray, Byte)(img.size) 

CopyMakeBorder 기능 초기화). 요지를 얻을 상단으로 1 픽셀, 아래쪽으로 연장된다. 테두리 형 상수 0 값은 목적지 이미지에서의 픽셀 값에 액세스

Cvinvoke.CopyMakeBorder(img,img1,1,1,1,1,BorderType.Constant, New MCvscalar(0)) 

은 (는 그레이 스케일 이미지이기 때문에), X = 100, Y = 100, 채널 0

Console.writeline(img1.data(100,100,0)) 

이 예를 픽셀을 0으로 디버그 출력을 만들 것입니다. 픽셀 값을 가져 가려고해도 0이됩니다. 특정 픽셀이 0이 아니어야합니다 (검정이 아님).

Cvinvoke.Imshow("test",img1) 

답변

0

Image.Data를 통해 데이터에 액세스하지만 추가 된 경계는 포함되지 않습니다. 그냥 원래의 비트 맵.

추가 된 경계는 Mat 속성에 있지만. I는 화소 값을 설정할 경우, I는 I 화상 '에'Mat` 변환이 이해로를 통해 개개의 화소만큼 멀리

' returns data from original bitmap 
Console.WriteLine(img1.Data(100, 100, 0)) 
' returns data from modified bitmap 
Console.WriteLine(img1.Mat.GetData(100, 100)(0)) 
+0

를 액세스 할 수있다() '(예를 들어, I는 반복하려면 픽셀). 대상 'Mat'을'Image (,) '로 변환해도'Image.Data'를 사용할 수 있습니까? – Tompel

+0

'픽셀 값을 설정하려면 (예를 들어 픽셀을 반복하고 싶을 때)이 모든 것은 동일하지 않습니다. 그럼 당신은 매트를 이미지에 넣을 수는 있지만 같은 오브젝트는 아니지만'Dim img2 = img1.Mat.ToImage (Of Gray, Byte)'복사본이므로 img1에 픽셀을 이렇게 설정할 수 없습니다 . 그러나 이것은 당신의 질문의 일부가 아니 었습니다;) – djv

+0

그래, 그럼 대상 이미지의 픽셀 값을 어떻게 조작합니까? emgucv 웹 사이트에서 읽은 것 같이 대상 이미지에서 픽셀에 액세스하는 가장 쉬운 방법은'Image (,)'로 변환하고'Image.Data'를 사용하는 것입니다. – Tompel

관련 문제