OpenCV-Python 회고 필터 와 연환 필터 구현
화 웨 이 핸드폰 이 든 다른 핸드폰 이 든 우 리 는 카메라 의 회고 효 과 를 찾 을 수 있다.이것 은 핸드폰 에서 자주 사용 하 는 필터 효과 이다.
회고 적 인 스타일 의 디자인 은 주로 이미지 의 색상 공간 에서 처리 된다.BGR 의 경우 B,G,R 이라는 3 개 채널 의 색상 수 치 를 처리 해 그림 이 누 렇 게 보 이 는 추억의 효 과 를 낸다.디자인 의 전환 공식 은 다음 과 같다.
B=0.272r+0.534g+0.131*b
G=0.349r+0.686g+0.168*b
R=0.393r+0.769g+0.189*b
공식 에 있 는 소문 자 bgr 를 계산 하 는 것 은 원래 이미지 의 RGB 채널 의 색 이 고 그 결과 BGR 은 회고 적 으로 변 경 된 값 이다.주의해 야 할 것 은 색상 값 의 범 위 는[0,255]이 므 로 프로그램 에서 제약 을 받 아야 합 니 다.
회고 필터 구현
우 리 는 이미 그 실현 의 원리 공식 을 이해 했다.다음은 우리 가 직접 코드 를 올 려 이 기능 을 실현 하고 구체 적 인 코드 는 다음 과 같다.
def cowboy_effect(img):
new_img = img.copy()
h, w, n = img.shape
for i in range(w):
for j in range(h):
b = img[j, i, 0]
g = img[j, i, 1]
r = img[j, i, 2]
B = int(0.272 * r + 0.534 * g + 0.131 * b)
G = int(0.349 * r + 0.686 * g + 0.168 * b)
R = int(0.393 * r + 0.769 * g + 0.189 * b)
new_img[j, i, 0] = max(0, min(B, 255))
new_img[j, i, 1] = max(0, min(G, 255))
new_img[j, i, 2] = max(0, min(R, 255))
return new_img
if __name__ == "__main__":
img = cv2.imread("48.jpg")
cv2.imshow("0", img)
cv2.imshow("1", cowboy_effect(img))
cv2.waitKey()
cv2.destroyAllWindows()
실행 후 효 과 는 다음 과 같 습 니 다.연환 화 필터 원리
회고 필터 에서 알 수 있 듯 이 카메라 의 각종 필터 효 과 는 RGB 의 색상 채널 을 계산 처리 하 는 것 이다.회고 필터 에 공식 이 있 는 만큼 긍정 적 인 연환 필터 에 도 공식 이 있다.그것 의 구체 적 인 공식 은 다음 과 같다.
R = |g C b + g + r| * r / 256
G = |b C g + b + r| * r / 256
B = |b C g + b + r| * g / 256
연속 필터 구현
공식 이 있 으 면 아래 에 직접 공식 을 적용 하면 된다.구체 적 인 코드 는 다음 과 같다.
#
def comics_effect(img):
new_img = img.copy()
h, w, n = img.shape
for i in range(w):
for j in range(h):
b = img[j, i, 0]
g = img[j, i, 1]
r = img[j, i, 2]
R = int(int(abs(g - b + g + r)) * r / 256)
G = int(int(abs(b - g + b + r)) * r / 256)
B = int(int(abs(b - g + b + r)) * g / 256)
new_img[j, i, 0] = R
new_img[j, i, 1] = G
new_img[j, i, 2] = B
return new_img
if __name__ == "__main__":
img = cv2.imread("48.jpg")
cv2.imshow("0", img)
cv2.imshow("1", comics_effect(img))
cv2.waitKey()
cv2.destroyAllWindows()
실행 후 효 과 는 다음 과 같 습 니 다.다시 말 하면 기본적으로 모든 기초 필 터 는 RGB 채널 의 색상 값 을 공식 적 으로 계산 한 것 이다.물론 수학 을 잘 하고 알고리즘 에 대한 애정 이 독특한 독자 라면 스스로 필터 알고리즘 을 연구 하여 필 터 를 풍부하게 하 는 효 과 를 얻 을 수 있다.
주조 알고리즘
r = r*128/(g+b +1);
g = g*128/(r+b +1);
b = b*128/(g+r +1);
얼음 알고리즘
r = (r-g-b)*3/2;
g = (g-r-b)*3/2;
b = (b-g-r)*3/2;
#include <math.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#define MAXSIZE (32768)
using namespace cv;
using namespace std;
void casting(const Mat& src)
{
Mat img;
src.copyTo(img);
int width=src.cols;
int heigh=src.rows;
Mat dst(img.size(),CV_8UC3);
for (int y=0;y<heigh;y++)
{
uchar* imgP=img.ptr<uchar>(y);
uchar* dstP=dst.ptr<uchar>(y);
for (int x=0;x<width;x++)
{
float b0=imgP[3*x];
float g0=imgP[3*x+1];
float r0=imgP[3*x+2];
float b = b0*255/(g0+r0+1);
float g = g0*255/(b0+r0+1);
float r = r0*255/(g0+b0+1);
r = (r>255 ? 255 : (r<0? 0 : r));
g = (g>255 ? 255 : (g<0? 0 : g));
b = (b>255 ? 255 : (b<0? 0 : b));
dstP[3*x] = (uchar)b;
dstP[3*x+1] = (uchar)g;
dstP[3*x+2] = (uchar)r;
}
}
imshow(" ",dst);
imwrite("D:/img/ .jpg",dst);
}
void freezing(const Mat& src)
{
Mat img;
src.copyTo(img);
int width=src.cols;
int heigh=src.rows;
Mat dst(img.size(),CV_8UC3);
for (int y=0;y<heigh;y++)
{
uchar* imgP=img.ptr<uchar>(y);
uchar* dstP=dst.ptr<uchar>(y);
for (int x=0;x<width;x++)
{
float b0=imgP[3*x];
float g0=imgP[3*x+1];
float r0=imgP[3*x+2];
float b = (b0-g0-r0)*3/2;
float g = (g0-b0-r0)*3/2;
float r = (r0-g0-b0)*3/2;
r = (r>255 ? 255 : (r<0? -r : r));
g = (g>255 ? 255 : (g<0? -g : g));
b = (b>255 ? 255 : (b<0? -b : b));
// r = (r>255 ? 255 : (r<0? 0 : r));
// g = (g>255 ? 255 : (g<0? 0 : g));
// b = (b>255 ? 255 : (b<0? 0 : b));
dstP[3*x] = (uchar)b;
dstP[3*x+1] = (uchar)g;
dstP[3*x+2] = (uchar)r;
}
}
imwrite("D:/img/ .jpg",dst);
}
int main()
{
Mat src = imread("D:/img/scene04.jpg",1);
imshow("src",src);
casting(src);
freezing(src);
waitKey();
}
OpenCV-Python 의 회고 필터 와 연환 필터 구현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 OpenCV 회고 필터 와 연환 필터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 OpenCV 템플릿 프로젝트 만들기・Windows 7 Professional 64bit ・Visual Studio 2017 Version 15.9.14 · OpenCV 3.4.1 OpenCV의 도입 방법 등은 아래를 참조하십시오. Visual Stu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.