나는 시간이 2에 가까워지기를 기다리지 않고 지금 당장이 작업을 해왔습니다. 도움을 요청하는 행운이없는 Google을 선택했습니다. 내가 시도하고있는 것은 이미지의 각 라인을 스캔하고 다음 색상이 현재 픽셀과 동일한 경우 인덱스를 진행 한 다음 (1) 행 당 각 해당 색상의 길이를 포함하는 목록을 작성하는 것입니다. (2) x 위치, (3) y 위치. 도움을 주시면 감사하겠습니다.이미지의 각 행에있는 대응 색상의 길이를 얻으십시오.
0
A
답변
1
각 픽셀의 RGB 값을 가져 와서 스캔 된 다음 픽셀 값과 비교하십시오. 값을 얻기 위해 다른 경우를 사용 ... 뭔가를이
for (int i = 0; i < image.rows; i++)
{
for(int j=0; j< image.cols; j++)
{
int b = image.at<cv::Vec3b>(i,j)[0];
int g = image.at<cv::Vec3b>(i,j)[1];
int r = image.at<cv::Vec3b>(i,j)[2];
}
// add your comparison here. Dun wanna do your work for u.
}
처럼 당신은 또한 빠른 처리를 위해 그레이 스케일 이미지를 변환 할 수 있지만 정보 손실이있을 것이다.
1
결국 모든 데이터가 올바르게 수집되었는지 for 루프가 발생할 때까지 데이터를 저장하는 구조를 사용했습니다. 다음은 다른 사람이 동일한 해결책을 찾고있는 경우에 사용되는 코드입니다. 먼저 필요한 데이터를 저장하기 위해 구조를 만듭니다.
internal struct VectorRectangle
{
public int X,Y,Size;
public string HexColor;
}
이제 이미지에서 값을 얻을 수있는 구조가되었습니다 (참고 : 너비는 높이가 아직 구현되지 않은 것으로 설정됩니다). 코드를 obtimize 할 수있는 방법이 있다면 그렇게하여 메시지를 보내주십시오. :).
internal static unsafe VectorRectangle[] GetRectangles(Bitmap @this)
{
const int PixelSize = 4;
List<VectorRectangle> vectorRectangles = new List<VectorRectangle>();
Point dummyPoint;
Rectangle rectangle = new Rectangle(dummyPoint, @this.Size);
BitmapData bitmapData = @this.LockBits(rectangle, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
for(int height = 0; height < @this.Height; height++)
{
VectorRectangle rect = new VectorRectangle();
rect.Size = 1;
for(int width = 0; width < @this.Width; width++)
{
byte* row = (byte*)(bitmapData.Scan0 + (height * BitmapData.Stride));
rect.X = width;
rect.Y = height;
rect.HexColor = ColorTranslator.ToHtml(Color.FromArgb(
row[(width * PixelSize) + 3], // blue
row[(width * PixelSize) + 2], // green
row[(width * PixelSize) + 1], // red
row[width * PixelSize] // transparency
));
while(width < @this.Width && ColorTranslator.ToHtml(Color.FromArgb(
row[((width + 1) * PixelSize) + 3], // blue
row[((width + 1) * PixelSize) + 2], // green
row[((width + 1) * PixelSize) + 1], // red
row[(width + 1) * PixelSize] // transparency
)) == rect.HexColor)
{
rect.Size++;
width++; }
vectorRectangles.Add(rect);
}
}
@this.UnlockBits(bitmapData);
return vectorRectangles.ToArray();
}
+0
(: – rockinfresh
관련 문제
- 1. 이미지의 RGB 색상의 평균
- 2. 이미지 대응 - 이미지의 일치하는 영역
- 3. 미디어 쿼리를 사용하여 유체 그리드의 각 행에있는 이미지의 수를 조정하십시오.
- 4. 이미지의 커브 길이를 계산하려면
- 5. 이미지의 픽셀 길이를 계산하십시오.
- 6. PHP 테이블의 각 행에있는 버튼
- 7. C에서 행/열의 길이를 얻으십시오 #
- 8. matplotlib의 색상 맵 길이를 얻으십시오.
- 9. openlayers : 선택한 기능의 길이를 얻으십시오.
- 10. 선택한 이미지의 값을 얻으십시오
- 11. 이미지의 압축률을 얻으십시오.
- 12. 자바에서 이미지의 이름을 얻으십시오
- 13. 마우스로 이미지의 점을 얻으십시오.
- 14. 스트림에서 PNG 이미지의 길이를 감지하십시오.
- 15. MongoDB : 서브 필드의 길이를 쿼리의 일부로 얻으십시오.
- 16. 대응
- 17. 각 행의 총계를 얻으십시오
- 18. Counting SQL Server의 각 행에있는 레코드 수
- 19. mysql의 각 행에있는 열의 단어 수를 찾으십시오.
- 20. Listview 문제의 각 행에있는 버튼 이벤트 처리
- 21. 각 행에있는 레코드의 회수를 반환합니다. SQL
- 22. 테이블의 각 행에있는 모든 div 태그 바꾸기
- 23. C의 각 단어의 길이를 계산합니다
- 24. AngularJS - 필터링 된 데이터의 길이를 얻으십시오.
- 25. * printf 함수 군의 목표 길이를 얻으십시오.
- 26. 서버에 업로드하기 전에 flv 길이를 얻으십시오.
- 27. 배열의 두 번째 차원의 길이를 얻으십시오
- 28. 자바 스크립트에서 mp3 노래 길이를 얻으십시오
- 29. 필터 선택 후 레코드의 현재 길이를 얻으십시오
- 30. 이미지의 각 포인트
조금 설명해 주시겠습니까? (i, j) [0]; 또한 안전하지 않은 코드를 사용합니다. 행 [(높이 PixelSize *) + 3] // \t \t \t \t \t \t \t \t 행 블루 [(높이 * PixelSize) + 2] // 녹색 \t \t \t \t \t \t \t \t 행 [(높이 * PixelSize) + 1], // 붉은 \t \t \t \t \t \t \t \t 행 [높이 * 내가 어디 승가는 참조로 PixelSize] // 투명성 –
user2991535
또한 당신에게 +1 투표 it it it it it it svg fill을 사용하여 파일에 씁니다. 필자는 각 픽셀을 작성하면서 많은 정보를 얻었지만 많은 공간을 필요로합니다. fill 요소의 너비와 updatint의 현재 위치를 업데이트하여 더 좋은 방법을 찾고 있습니다. – user2991535
그래, rgb 값을 얻는 또 다른 방법이고, 다른 방법은 포인터도 사용하는 것입니다. 흠. 나는 당신의 2 번째 질문에서 약간 혼란 스럽다. 당신이 원하는 색상의 길이를 얻고 싶을 때, 제 생각은 다음과 같이됩니다 : 현재 픽셀의 r 값이 이전 픽셀의 r 값과 유사하고 현재 픽셀의 g 값이 이전 g 값과 비슷하고 b가 동일하면 길이가 ++입니다. 당신의 질문에 오해가 있었습니까? 하하. – rockinfresh