2012-06-04 4 views
0

현재 8 비트 비트 맵을 읽고 픽셀 데이터와 색상 표를 절약하기 위해 C++을 사용하고 있습니다. 나는 현재 내 색상 표 배열에 저장 한 :팔레트 정보로 8 비트 비트 맵 자르기

RGBQUAD* colours; 

가 나는 픽셀에 비트 맵을 모든 방향에서 가장 가까운 독특한 픽셀의 색상을 발견하고 자르기 가겠어요 궁금 해서요. 외부 라이브러리없이 C++을 사용하고 있습니다.

+0

그레이 스케일로 변환 한 다음 가장자리 감지 알고리즘을 사용하는 것이 가장 좋은 방법이라고 생각했습니다. 어느 누구도 이것에 대한 생각을 할 수 있습니까? – Aequitas

답변

2

나는 대신 특정 바퀴를 다시 구현하기 위해 노력하는, ImageMagick처럼 쉽게 사용할 라이브러리를 사용하는 것이 좋습니다.

다른 곳에서 잘 구현 된 것을 구현해야하는 이유는 다음 두 가지뿐입니다. 1) 숙제 2) 실제로 기존 코드보다 훨씬 효율적으로 수행 할 수 있다고 생각하는 이유는 두 가지입니다. 그런 다음, 요구하지 않기 때문에

+0

실제로는 그렇지 않습니다. – Aequitas

+0

@Aequitas : ...하지만 사람들에게 왜 바퀴의 재발 명을 주장하는지 말하지 않으면 사람들은 계속해서 "바퀴를 사용하십시오"라고 말합니다. ;-) – DevSolar

+0

저는 라이브러리를 사용하지 않고도 하위 수준의 이미지 조작에 관해서 최대한 배우고 싶습니다. 앞으로 도서관을 최대한 활용할 것입니다.하지만 먼저 무언가를 어떻게 성취하는지 배우기 위해 무언가를하고 싶습니다. – Aequitas

0

"가까운 독특한 픽셀 색상"에 가까운 의미 ...)에는 "숙제"태그가 없기 때문에 그것은 1)이 될 수 없으며이 될 수 없습니다 색 공간? 절대적인 용어 (R/G/B) 또는 인간의 감각? 따라서 #0002FE을 주시면 색상 표에 #0000FF이 표시 될 수 있습니다.

"표준"단순 C++ 방법은 범위와 술어를 사용하는 std::min_element()입니다. 귀하의 경우, 그 범위는 귀하의 컬러 테이블이며 술어는 원하는 색상의 근접성입니다. 예 : [targetColor](RGBQUAD tableEntry) { return abs(RGBdiff(tableEntry, targetColor)); }

+0

인간의 의미. – Aequitas

+0

@Aequitas : 훨씬 더 어렵습니다. Googling "색차 지각"은 이것이 진행중인 연구의 주제라는 것을 보여줄 것입니다. 간단한 방법은 두 색상의 [CIELAB] (http://en.wikipedia.org/wiki/CIELAB) 변환을 사용하여 'RGBdiff'를 구현 한 다음 'Lab'공간에서 간단한 차이를 적용하는 것입니다. – MSalters

관련 문제