2012-04-03 3 views
1

C++ openCV API를 사용하고 있으며 이미지의 특정 픽셀 만 선택적으로 흐리게 처리하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 하위 행렬을 통해 그것을 시도했지만 그것을 작동시키지 못했습니다.이미지의 OpenCV 필터링 부분

//5 is the 'radius' i'm blurring (~1/2 kernel width) 
cv::Rect srcRect; 
srcRect.x = x - 5; 
srcRect.y = y - 5; 
srcRect.width = 2*5 + 1; 
srcRect.height = 2*5 + 1; 

cv::Rect dstRect; 
dstRect.x = x; 
dstRect.y = y; 
dstRect.width = 1; 
dstRect.height = 1; 

cv::Mat src = srcImage(srcRect); 
cv::Mat dst = dstImage(dstRect); 

cv::blur(src, dst, cv::Size(5,5)); 

위 코드를 사용하면 아무 것도 변경되지 않습니다.

두 사각형을 모두 srcRect로 설정하면 하위 이미지가 흐리게 보이지만 단일 픽셀 대신 전체 dst가 흐려집니다.

아이디어가 있으십니까?

답변

3

srcdst은 동일한 크기 여야합니다. 귀하의 예제에서 dst는 정확히 한 픽셀의 하위 영역입니다.

직사각형을 만드는 방법 외에도 코드가 정확합니다.

Rect srcDstRect(7, 7, 100, 100); 
cv::Mat src = srcImage(srcDstRect); 
cv::Mat dst = dstImage(srcDstRect); 

cv::blur(src, dst, cv::Size(5,5)); 
+0

의 복제 이미지이다. 기본적으로 단일 픽셀을 수정하고 주변의 모든 값의 평균 값으로 설정하려고합니다. 어떤 아이디어? –

+0

OpenCV에는 기본 보더 보간 방법이 있기 때문에 자신 만의 블러 링을 구현해야한다고 생각합니다. 또는 dst를 src만큼 큰 별도의 이미지로 만들고, 정의한대로 src를 유지하고, orig dstImage에있는 dst의 중심을 복사하십시오. – Sam

+1

사실, 코드에서 cv :: blur는 새로운 dst 행렬을 만들어 버립니다 src와 크기가 같지 않기 때문에 사용자가 설정합니다. 중앙 픽셀을 dstImage로 다시 복사하기 만하면됩니다. – Sam

0

입력은 원본 이미지이고, 흐림은 그 CV : 흐림이 SRC에 _all_ 픽셀 흐리게 보인다 입력

int x1=1,y1=1,x2=200,y2=200; 

Rect region(x1, y1, x2, y2); 

GaussianBlur(input(region), blur(region), Size(5, 5), x,0); 
관련 문제