그레이스케일 위조 컬러 코드

10691 단어 코드
주요 기능은 그레이스케일에서 밝기가 높은 픽셀점일수록 위조 컬러도에서 대응하는 점이 빨간색으로 변하는 것이다.밝기가 낮을수록 대응하는 위조 컬러는 파란색으로 변한다.전체적으로 그레이스케일의 높낮이에 따라 빨간색에서 파란색으로 점차적으로 변하고 중간색은 녹색으로 변한다.해당 관계식은 다음 그림과 같습니다.

     
     
1 void F_Gray2Color(CvMat * gray_mat, CvMat * color_mat)
2 {
3 if (color_mat)
4 cvZero(color_mat);
5
6 int stype = CV_MAT_TYPE(gray_mat -> type), dtype = CV_MAT_TYPE(color_mat -> type);
7 int rows = gray_mat -> rows, cols = gray_mat -> cols;
8
9 //
10 if (CV_ARE_SIZES_EQ(gray_mat, color_mat) && stype == CV_8UC1 && dtype == CV_8UC3)
11 {
12 CvMat * red = cvCreateMat(rows, cols, CV_8U); //
13 CvMat * green = cvCreateMat(rows, cols, CV_8U); //
14 CvMat * blue = cvCreateMat(rows, cols, CV_8U); //
15 CvMat * mask = cvCreateMat(rows, cols, CV_8U);
16
17 cvSubRS(gray_mat, cvScalar( 255 ), blue); // blue = 255 - gray
18 cvCopy(gray_mat, red); // red = gray
19 cvCopy(gray_mat, green); // green = gray , if gray < 128
20 cvCmpS(green, 128 , mask, CV_CMP_GE ); //
21 cvSubRS(green, cvScalar( 255 ), green, mask); // green = 255 - gray , if gray >= 128
22 cvConvertScale(green, green, 2.0 , 0.0 ); // green = 2 * green
23
24 //
25 cvMerge(blue, green, red, NULL, color_mat);
26
27 cvReleaseMat( & red );
28 cvReleaseMat( & green );
29 cvReleaseMat( & blue );
30 cvReleaseMat( & mask );
31 }
32 }

trackback: 
http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=9476

좋은 웹페이지 즐겨찾기