GPUImage
에는 카메라의 프레임 스트림 (예 : 저역 통과 필터 또는 고역 통과 필터)에서만 작동하는 필터가 많이 있지만 그 중 일부는 많습니다.
나는 UIImages의 버퍼를 만들려고합니다. 고정 된 타이머를 사용하면 단 2 개의 이미지 사이에서 이들 필터를 적용 할 수 있으며 각 이미지 쌍마다 하나의 필터링 된 이미지가 생성됩니다. 뭐 그런 :
FirstImage + SecondImage -> FirstFilteredImage
SecondImage + ThirdImage -> SecondFilteredImage I 프레임 작동 필터가 GPUImageBuffer
사용하는 것으로 나타났습니다
, 그 GPUImageFilter
의 서브 클래스 (대부분의 아마 상속입니다 일부 방법 및 프로토콜)은 패스 쓰루 프래그먼트 셰이더를로드합니다. 내가 이해하는 바로는 이것은 들어오는 프레임은 계속 유지하지만 이미 "텍스쳐 화 된"버퍼이며, 텍스처는 현재 컨텍스트에서 텍스처를 바인딩하여 생성됩니다.
-conserveMemoryForNextFrame
나는 달성하고자하는 것에 좋다고 들리지만 어떻게 작동하는지 알지 못했습니다.
그렇게 할 수 있습니까? 어떤 방법으로 이미지가 텍스처로 변환됩니까?GPUImage는 이미지 버퍼에 필터를 적용합니다.
0
A
답변
0
나는 내가 달성하고 싶은 것에 대해 뭔가를 만들었지 만, 첫 번째 예에서는 현재 필터 기능에 대한 몇 가지 의견을 오해했을 것입니다.
일부 필터는 셰이더에서 시간 변수를 고려한 일부 작업을 수행 할 수 있다고 생각했습니다. 왜냐하면 로우 패스 필터와 하이 패스 필터를 보았을 때 나는 즉시 시간을 생각했기 때문입니다. 현실은 다른 것처럼 보이지만 시간을 고려하지만 필터링 작업에 영향을 미치지는 않습니다.
나는 하나의 이미지를 저장하고 다른 타임 라인으로 재구성하여 오디오없이 비디오를 만드는 저속 애플리케이션을 개발 중이므로 이후 필터 기능은 시간의 필터 기능이 후속 작업에 적용하는 것이 재미있을 수 있다고 생각했습니다. 프레임. 이것은 내가 왜이 질문을 게시했는지에 대한 이유입니다.
지금 대답은 : 코드 조각처럼에 아직도 당신이해야 할 이미지를 이중 입력 필터를 적용하기 : 당신이 -useNextFrameForImageCapture
전화를 잊어 버린 경우
[sourcePicture1 addTarget:twoinputFilter];
[sourcePicture1 processImage];
[sourcePicture2 addTarget:twoinputFilter];
[sourcePicture2 processImage];
[twoinputFilter useNextFrameForImageCapture];
UIImage * image = [twoinputFilter imageFromCurrentFramebuffer];
반환 된 이미지로 인해 버퍼 재사용, 전무 할 것이다 .
미래에 좋은 Brad가 이런 식으로 만들 것이라고 생각해서 GPUImagePicture 서브 클래스를 만들었습니다. kCMTimeIvalid를 적절한 메서드로 반환하는 대신 -frameTime
이라는 프레임 CMTime을 포함하는 새 ivar를 반환합니다.
@interface GPUImageFrame : GPUImagePicture
@property (assign, nonatomic) CMTime frameTime;
@end
@implementation GPUImageFrame
- (BOOL)processImageWithCompletionHandler:(void (^)(void))completion;
{
hasProcessedImage = YES;
// dispatch_semaphore_wait(imageUpdateSemaphore, DISPATCH_TIME_FOREVER);
if (dispatch_semaphore_wait(imageUpdateSemaphore, DISPATCH_TIME_NOW) != 0)
{
return NO;
}
runAsynchronouslyOnVideoProcessingQueue(^{
for (id<GPUImageInput> currentTarget in targets)
{
NSInteger indexOfObject = [targets indexOfObject:currentTarget];
NSInteger textureIndexOfTarget = [[targetTextureIndices objectAtIndex:indexOfObject] integerValue];
[currentTarget setCurrentlyReceivingMonochromeInput:NO];
[currentTarget setInputSize:pixelSizeOfImage atIndex:textureIndexOfTarget];
[currentTarget setInputFramebuffer:outputFramebuffer atIndex:textureIndexOfTarget];
[currentTarget newFrameReadyAtTime:_frameTime atIndex:textureIndexOfTarget];
}
dispatch_semaphore_signal(imageUpdateSemaphore);
if (completion != nil) {
completion();
}
});
return YES;
}
- (void)addTarget:(id<GPUImageInput>)newTarget atTextureLocation:(NSInteger)textureLocation;
{
[super addTarget:newTarget atTextureLocation:textureLocation];
if (hasProcessedImage)
{
[newTarget setInputSize:pixelSizeOfImage atIndex:textureLocation];
[newTarget newFrameReadyAtTime:_frameTime atIndex:textureLocation];
}
}
관련 문제
- 1. 표시되기 바로 전에 프레임 버퍼에 필터를 적용하십시오.
- 2. OpenCV는 내 자신의 필터를 컬러 이미지에 적용합니다.
- 3. GPUImage는 작은 이미지에 필터를 적용하지만 큰 이미지를 표시합니다.
- 4. 조회 필터를 사용하는 GPUImage는 엄청난 양의 메모리를 사용합니다.
- 5. android 출력 믹스에 오디오 pcm 필터를 적용합니다.
- 6. Access 용 VBA는 별도의 형식으로 필터를 적용합니다.
- 7. Rex Redux는 백업 통화와 라우팅에 필터를 적용합니다.
- 8. 버퍼에 이미지 저장
- 9. 이맥스 텍스트 버퍼에 이미지 삽입하기
- 10. GPUImage는 텍스처의 색상으로 색상을 대체합니다.
- 11. Zend 1.11은 제출 버튼에 htmleneities 필터를 자동으로 적용합니다.
- 12. 저장 버튼을 클릭하면 자동으로 이미지 뷰를 적용합니다.
- 13. AVPlayerLayer가 UIImageView 버퍼에 이미지 가져 오기
- 14. 버퍼에 그래프 차트 추가하기
- 15. 이미지 뷰에 컬러 필터를 추가하고 싶습니다.
- 16. 박스 평균 평균 이미지 필터를 matlab을 사용하여
- 17. 특징 가보 필터를 사용한 이미지 추출?
- 18. iOS 6는 코어 이미지 필터를 지원합니까?
- 19. CGPDF - FlateDecode 필터를 사용하여 이미지 저장하기
- 20. 이미지 필터를 사용하여 2 차원 곡선을 추출
- 21. 코어 이미지 필터를 올바르게 적용하는 방법
- 22. 하위 이미지 너비를 찾고이를 포함하는 부모 div jquery에 적용합니다.
- 23. ImageResizer 워터 마크가 워터 마크 이미지 대신 기본 이미지를 적용합니다.
- 24. jquery 'x'number 이미지 요소에 src와 클래스에 'x'를 적용합니다.
- 25. 이미지 필터를 만들 때 이미지 처리가 너무 느림
- 26. system.drawing.graphics 클래스의 원시 이미지 버퍼에 대한 참조를 가져올 수 있습니까?
- 27. 이미지 크기를 조정하고 파이썬을 사용하여 버퍼에 데이터를 가져옵니다.
- 28. 마크 업을 통해 emacs 버퍼에 이미지/강조 표시 추가하기
- 29. JFace는 TableViewerColumn을 적용합니다
- 30. CSS는 "클릭하자"클래스를 적용합니다
왜 그냥이 이미지의 각각에 대해 별도의 GPUImagePicture 인스턴스를 만든 다음 이미지의 각 쌍에 작용하는 두 개의 입력 필터를 적용? –
고마워 브랜드, 지금 내가보고있어, 더 의미가 있습니다. 나중에 결과를 게시하겠습니다. – Andrea