문제

컴퓨터 이미징의 Nitty-Gritties와 함께 일하고 싶습니다. 단일 픽셀의 데이터를 읽고 프로그래밍 방식으로 분석 한 후 변경하는 방법을 찾고 있습니다. 이것에 사용하기에 가장 좋은 언어는 무엇입니까 (Python, C ++, Java ...)? 최고의 FileFormat는 무엇입니까?

나는 슈퍼 멋진 소프트웨어/API를 원하지 않습니다 ... 나는 베어 기본 사항을 찾고 있습니다.

도움이 되었습니까?

해결책

속도가 필요한 경우 (아마도 이미지 처리로 항상 속도를 원할 것입니다) 원시 픽셀 데이터로 작업해야합니다. Java는 메모리에 직접 액세스 할 수 없으므로 메모리에 직접 액세스하는 것과 비교하여 픽셀 액세스가 상당히 느리게 만듭니다. C ++는 확실히 생산 사용 이미지 처리를위한 선택 언어입니다. 그러나 예를 들어 특정 영역에서 안전하지 않은 코드를 허용하므로 C#을 사용할 수도 있습니다. (BitMapData 클래스의 Scan0 포인터 속성을 살펴보십시오.) 이미지 처리 응용 프로그램에 C#을 성공적으로 사용했으며 Java 상대보다 훨씬 빠릅니다. 나는 그러한 목적으로 스크립팅 언어 나 Java를 사용하지 않을 것입니다.

다른 팁

고급 언어를 사용하는 그림 인 대형 다차원 또는 복잡한 픽셀 정보를 조작하는 것은 매우 동쪽입니다. 파이썬. 라이브러리가 있습니다 PIL (파이썬 이미징 라이브러리) 이는 매우 유용하며 일반 필터 및 변환 (밝기, 부드러운, 불포화, 작물 등)을 수행하고 원시 픽셀 데이터를 조작 할 수 있습니다.

그것은 가장 쉽고 단순합니다 내가 지금했던 이미지 라이브러리에 관심이있는 모든 일을하도록 확장 할 수 있습니다.가장자리 감지 예를 들어 코드가 아주 적습니다).

C/C ++가 더 빠를뿐만 아니라 대부분의 이미지 처리 샘플 코드가 C에도있을 것이므로 찾은 항목을 더 쉽게 통합 할 수 있습니다.

이미지에 대한 수치 작업을 찾고 있다면 (매트릭스를 생각하십시오) Python에서 확인하십시오. http://www.scipy.org/pylab - 이것은 기본적으로 파이썬에서 Matlab을 할 수있는 능력입니다.

(이것은 베어 기본 사항 만 원한 OP에 적용되지 않을 수도 있습니다. 그러나 이제 속도 문제가 발생 했으므로 기록을 위해서는 이것을 써야합니다.)

만약 너라면 진짜 속도가 필요합니다. 픽셀 바이 픽셀 레벨에서의 작업을 잊어 버리는 것이 좋습니다. 오히려 수행 해야하는 작업이 벡터화. 예를 들어 C/C ++ 코드의 경우 우수한 것을 사용할 수 있습니다. 인텔 IPP 라이브러리 (아니요, 나는 인텔에서 일하지 않습니다).

그것은 당신이하려는 일에 약간 의존합니다.

런타임 속도가 문제라면 C ++가 가장 좋은 방법입니다.

그러나 개발 속도가 문제라면 Java를 보는 것이 좋습니다. 당신은 당신이 Java가 당신을 위해 할 수있는 픽셀의 낮은 수준 조작을 원한다고 말했습니다. 그러나 문제가 될 수있는 또 다른 것은 다양한 파일 형식의 처리입니다. Java는 다양한 이미지 형식의 읽기 및 쓰기를 파일에 대처하는 아주 좋은 API를 가지고 있습니다 (특히 Java2D 라이브러리. API의 더 높은 수준을 무시하기로 선택 함).

C ++ 옵션 (또는 Python이 생각하게됩니다)을 찾으면 파일 읽기 및 쓰기의 시작 문제를 해결하기 위해 라이브러리를 사용하여 다시 제안 할 것입니다. 나는 이전에 성공했습니다 libgd

당신은 어떤 언어를 가장 잘 알고 있습니까? 나에게 이것은 진짜 질문입니다. 한 가지 특정 언어를 배우는 데 몇 달과 몇 달을 보내려면 (입증 된) 개발 속도를 위해 파이썬이나 Java를 사용하는 데 실질적인 이점이 없습니다. 나는 C ++에 특히 능숙 하며이 특정 작업의 경우 예를 들어 Java 프로그래머만큼 빠를 수 있다고 생각합니다. 좋은 도서관 (OpenCV가 떠오른다)을 사용하면 C ++ 코드의 몇 줄에 필요한 모든 것을 만들 수 있습니다.

짧은 대답 : C ++ 및 OpenCV

나는 인공 지능과 컴퓨터 비전을 연구했기 때문에이 분야에서 사용되는 도구의 종류를 잘 알고 있습니다.

기본적으로 : 현장 뒤에서 어떻게 작동하는지 아는 한 원하는 것을 사용할 수 있습니다.

이제 달성하고자하는 것에 따라 다음 중 하나를 사용할 수 있습니다.

  • C 언어이지만 알고리즘을 구현할 때 버그 점검 및 메모리 관리에서 많은 시간을 잃게됩니다. 따라서 이론적으로, 이것은 그런 종류의 작업을 수행하는 가장 빠른 언어이지만 알고리즘이 계산적으로 효율적이지 않으면 (복잡성 측면에서) 버그 점검에서 너무 많은 시간을 잃어 버리면 분명히 가치가 없습니다. 따라서 먼저 다른 언어로 응용 프로그램을 구현하는 것이 좋습니다. 그런 다음 나중에 C BINDING으로 코드의 작은 부분을 항상 최적화 할 수 있습니다.
  • OCTAVE/MATLAB : 거의 C만큼 매우 효율적인 언어로 매우 우아하고 간결한 알고리즘을 만들 수 있습니다. 벡터화, 매트릭스 및 선형 작업에 빠지면 그와 함께 가야합니다. 그러나이 언어로 전체 애플리케이션을 개발할 수는 없으며 알고리즘에 더 중점을 두지 만 나중에 다른 언어를 사용하여 항상 인터페이스를 개발할 수 있습니다.
  • Python : Google 및 Facebook과 같은 대규모 응용 프로그램에 사용되는 올인원 우아하고 접근 가능한 언어. 파이썬, 모든 종류의 응용 프로그램으로 원하는 모든 것을 할 수 있습니다. 전체 응용 프로그램을 만들려면 (클라이언트 상호 작용 및 모두 알고리즘뿐만 아니라) 또는 Python이 매우 큰 고품질 라이브러리 세트가 있기 때문에 기존 라이브러리를 사용하여 프로토 타입을 신속하게 작성하려는 경우 완벽하게 조정됩니다. Opencv. 그러나 알고리즘 만 만들고 싶다면 옥타브/MATLAB을 더 잘 사용해야합니다.

솔루션으로 선택된 대답은 매우 부정되어 있으며, 이런 종류의 고풍스러운 의견에주의해야합니다.

요즘 하드웨어는 습식 (인간)보다 저렴하므로 CPU주기 또는 메모리 공간의 비용이 더하더라도 결과를 더 빨리 생성 할 수있는 언어를 사용해야합니다.

또한 많은 사람들이 C/C ++에서 소프트웨어를 구현하는 한 Saint Graal of Speedness를 만들고 있다고 생각하는 경향이 있습니다. 이것은 사실이 아닙니다. 첫째, 알고리즘 복잡성은 사용하는 언어보다 훨씬 중요하기 때문에 (우주에서 가장 느린 언어로 구현하더라도 나쁜 알고리즘은 더 나은 알고리즘을 이길 수는 없음), 오늘날 고급 언어가 많은 일을 많이하기 때문에 캐싱 및 속도 최적화로 인해 프로그램을 C/C ++보다 훨씬 빠르게 실행할 수 있습니다.

물론, 당신은 항상 위의 모든 것을 c/c ++에서 할 수 있지만, 바퀴를 재창조하기 위해 얼마나 많은 시간을 낭비 할 것인가?

짧은 대답? C ++라고 말하고 싶습니다. Python 또는 Java보다 메모리 덩어리를 조작하는 데 훨씬 더 유연성이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top