java, imagemagick 또는 jmagick을 사용하여 이미지에서 지배적 인 색을 찾을 수 있습니까?이미지의 지배적 인 색을 어떻게 찾을 수 있습니까?
답변
를 결정 색상
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
public class ImageTester {
public static void main(String args[]) throws Exception {
File file = new File("C:\\Users\\Andrew\\Desktop\\myImage.gif");
ImageInputStream is = ImageIO.createImageInputStream(file);
Iterator iter = ImageIO.getImageReaders(is);
if (!iter.hasNext())
{
System.out.println("Cannot load the specified file "+ file);
System.exit(1);
}
ImageReader imageReader = (ImageReader)iter.next();
imageReader.setInput(is);
BufferedImage image = imageReader.read(0);
int height = image.getHeight();
int width = image.getWidth();
Map m = new HashMap();
for(int i=0; i < width ; i++)
{
for(int j=0; j < height ; j++)
{
int rgb = image.getRGB(i, j);
int[] rgbArr = getRGBArr(rgb);
// Filter out grays....
if (!isGray(rgbArr)) {
Integer counter = (Integer) m.get(rgb);
if (counter == null)
counter = 0;
counter++;
m.put(rgb, counter);
}
}
}
String colourHex = getMostCommonColour(m);
System.out.println(colourHex);
}
public static String getMostCommonColour(Map map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
Map.Entry me = (Map.Entry)list.get(list.size()-1);
int[] rgb= getRGBArr((Integer)me.getKey());
return Integer.toHexString(rgb[0])+" "+Integer.toHexString(rgb[1])+" "+Integer.toHexString(rgb[2]);
}
public static int[] getRGBArr(int pixel) {
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
return new int[]{red,green,blue};
}
public static boolean isGray(int[] rgbArr) {
int rgDiff = rgbArr[0] - rgbArr[1];
int rbDiff = rgbArr[0] - rgbArr[2];
// Filter out black, white and grays...... (tolerance within 10 pixels)
int tolerance = 10;
if (rgDiff > tolerance || rgDiff < -tolerance)
if (rbDiff > tolerance || rbDiff < -tolerance) {
return false;
}
return true;
}
}
그냥 각 픽셀을 반복하고 각 색상이 포함 된 빈도를 셀 수 일반 자바를 사용하여 ...
의사 코드 :
Map<Color, Integer> color2counter;
for (x : width) {
for (y : height) {
color = image.getPixel(x, y)
occurrences = color2counter.get(color)
color2counter.put(color, occurrences + 1)
}
}
(0,0,0)이 검은 색이고 (255, 255, 255)가 흰색 인 경우 (내가 잘못하면 나를 수정하십시오). 또한, RGB의 지배적 인 색을 찾고 싶다면 :
당신이 조사 할 자유로운 아이디어 하나 하나는 각각 RGB 값 중 하나를 저장하고 각 RGB 값을 저장하는 3 가지 변수를 갖는 것입니다. 그들에게 이미지의 모든 픽셀의 적절한 값을 입력 한 다음 (255 * numOfPixels)로 나눠 색상의 비율을 얻습니다. 그런 다음 3 가지 비율을 비교하십시오 : 빨간색은 .60, 녹색은 .560은 빨간색이 더 우세함을 의미합니다.
이 그냥 생각하고, 조정해야 할 수도 있습니다 ...
jamagick을 RGB 형식으로 사용하는 jamagick을 사용했지만이 방법으로는 이미지의 avarage clor 만 찾을 수 있습니다. 그러나 나는 중간 색의 이미지를자를 수있는 아이디어를 가지고 있으므로, 거의 같은 색을 다시주는 부분의 색을 찾을 수 있습니다. 지배적 인 색상 만 찾습니다 :/ –
@ ErçinAkçay 이미지를 자르려면 반드시 테두리에 주 색상이 필요합니다. 예 : 흰색으로 둘러싸인 커다란 사각형이 있다고 해봅시다. 당신은 사각형이 아닌 흰색의 색을 감지하기를 원합니다. –
이 까다로운 문제입니다. 예를 들어, 정확히 같은 색의 작은 영역과 다른 색의 약간 다른 색조의 큰 영역이있는 경우 가장 많이 사용되는 색을 찾는 것만으로도 원하는 결과를 얻지 못할 수 있습니다. 당신은 색상 세트를 정의하고 각각의 색상에 대해 '고려해야 할'RGB 값의 범위를 정의함으로써 더 나은 결과를 얻을 수 있습니다.
이 항목은 예를 들어, ImageMagick이 담론 서버에 길이 설명 : http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=12878
난 그냥 하찮게 자바로 번역 될 수있는 매우 간단한 알고리즘을 발표 참조하십시오. color-finder라고하며 JavaScript로 작동합니다.
이 스레드에서 제안 된 솔루션은 이미지의 몇 가지 흰색 문자로 표시 될 수 있지만 모든 픽셀이 실제로 정확히 동일한 색상이 아니더라도 실제로 가장 눈에 띄는 색상을 찾으려고합니다.
유용한 정보가 있으면 알려주세요.
- 1. 누구나 웹 페이지를 가져와 사용 된 지배적 인 색을 식별하는 추론을 제안 할 수 있습니까?
- 2. blury 이미지의 가치를 어떻게 찾을 수 있습니까? Matlab 질문
- 3. 이미지를 지배적 인 색상으로 자동 분류하는 방법은 무엇입니까?
- 4. Vim에서 파이썬의 색을 어떻게 바꿀 수 있습니까?
- 5. 지배적 인 고유치를 사용하여 고유 벡터를 계산합니다.
- 6. PictureBox 그리기 이미지의 색을 배열
- 7. UIPopoverController의 테두리 색을 어떻게 바꿀 수 있습니까?
- 8. 어떻게 AttributeSet에서 안정적으로 색을 얻을 수 있습니까?
- 9. 선택한 텍스트의 색을 어떻게 바꿀 수 있습니까?
- 10. LinearLayout의 현재 색을 어떻게 얻을 수 있습니까?
- 11. XNA에서 이미지의 색을 변경하는 방법
- 12. Silverlight에서 리소스를 어떻게 찾을 수 있습니까?
- 13. 어떻게 shp2pgsql을 찾을 수 있습니까?
- 14. "."을 어떻게 찾을 수 있습니까?
- 15. 비율을 어떻게 찾을 수 있습니까?
- 16. nodeType을 어떻게 찾을 수 있습니까?
- 17. 이것을 어떻게 찾을 수 있습니까?
- 18. 어떻게 히스토그램의 값을 찾을 수 있습니까?
- 19. Xcode에서 이미지의 높이를 어떻게 바꿀 수 있습니까?
- 20. 이미지의 너비와 높이를 어떻게 얻을 수 있습니까?
- 21. 이미지의 형식은 어떻게 얻을 수 있습니까?
- 22. UIWebView에서 이미지의 URL을 어떻게 얻을 수 있습니까?
- 23. ID가있는 이미지의 이름은 어떻게 얻을 수 있습니까?
- 24. 내 콘솔 앱 (C)에서 어떻게 색을 사용할 수 있습니까?
- 25. 어떻게 프로그래밍 방식으로 DateTimePicker 컨트롤의 배경색을 찾을 수 있습니까?
- 26. 문자열에서 'NULL'문자열을 어떻게 찾을 수 있습니까?
- 27. 코퍼스에서 '흥미로운'단어 만 어떻게 찾을 수 있습니까?
- 28. 어떻게 Heroku에서 메모리 누출을 찾을 수 있습니까?
- 29. iPhone에서 이미지의 일부분 만 색을 채우는 방법
- 30. PHP DOM을 사용하여 이미지의 너비와 높이를 찾을 수 있습니까?
이미지에서 가장 많이 사용되는 음영 또는 평균 색상을 의미합니까? –