add green channel

main
Xiao Song 3 years ago
parent 0bdbec495d
commit cd4f969ffe

4
.gitignore vendored

@ -57,3 +57,7 @@ tests/test_burst
# VS Settings # VS Settings
CMakeSettings.json CMakeSettings.json
# Xiao local files
debug/

@ -163,7 +163,7 @@ void print_cvmat( cv::Mat image )
*/ */
template <typename T> template <typename T>
void extract_rgb_fmom_bayer( const cv::Mat& bayer_img, \ void extract_rgb_fmom_bayer( const cv::Mat& bayer_img, \
cv::Mat& red_img, cv::Mat& green_img, cv::Mat& blue_img ) cv::Mat& red_img, cv::Mat& green_img1, cv::Mat& green_img2, cv::Mat& blue_img )
{ {
const T* bayer_img_ptr = (const T*)bayer_img.data; const T* bayer_img_ptr = (const T*)bayer_img.data;
int bayer_width = bayer_img.size().width; int bayer_width = bayer_img.size().width;
@ -179,12 +179,14 @@ void extract_rgb_fmom_bayer( const cv::Mat& bayer_img, \
int rgb_width = bayer_width / 2; int rgb_width = bayer_width / 2;
int rgb_height = bayer_height / 2; int rgb_height = bayer_height / 2;
red_img.create( rgb_height, rgb_width, bayer_img.type() ); red_img.create( rgb_height, rgb_width, bayer_img.type() );
green_img.create( rgb_height, rgb_width, bayer_img.type() ); green_img1.create( rgb_height, rgb_width, bayer_img.type() );
green_img2.create( rgb_height, rgb_width, bayer_img.type() );
blue_img.create( rgb_height, rgb_width, bayer_img.type() ); blue_img.create( rgb_height, rgb_width, bayer_img.type() );
int rgb_step = red_img.step1(); int rgb_step = red_img.step1();
T* r_img_ptr = (T*)red_img.data; T* r_img_ptr = (T*)red_img.data;
T* g_img_ptr = (T*)green_img.data; T* g1_img_ptr = (T*)green_img1.data;
T* g2_img_ptr = (T*)green_img2.data;
T* b_img_ptr = (T*)blue_img.data; T* b_img_ptr = (T*)blue_img.data;
for ( int rgb_row_i = 0; rgb_row_i < rgb_height; rgb_row_i++ ) for ( int rgb_row_i = 0; rgb_row_i < rgb_height; rgb_row_i++ )
@ -198,7 +200,8 @@ void extract_rgb_fmom_bayer( const cv::Mat& bayer_img, \
for ( int rgb_col_j = 0; rgb_col_j < rgb_width; rgb_col_j++ ) for ( int rgb_col_j = 0; rgb_col_j < rgb_width; rgb_col_j++ )
{ {
r_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset1 + ( rgb_col_j * 2 + 0 ) ]; r_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset1 + ( rgb_col_j * 2 + 0 ) ];
g_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset1 + ( rgb_col_j * 2 + 1 ) ]; g1_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset1 + ( rgb_col_j * 2 + 1 ) ];
g2_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset2 + ( rgb_col_j * 2 + 0 ) ];
b_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset2 + ( rgb_col_j * 2 + 1 ) ]; b_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset2 + ( rgb_col_j * 2 + 1 ) ];
} }
} }

@ -10,7 +10,7 @@ void test_box_filter_2x2()
// Intialize input data // Intialize input data
int src_width = 10; int src_width = 10;
int src_height = 6; int src_height = 6;
std::vector<uint16_t> src_data( src_width, src_height ); std::vector<uint16_t> src_data( src_width * src_height );
for ( int i = 0; i < src_width * src_height; ++i ) for ( int i = 0; i < src_width * src_height; ++i )
{ {
@ -37,7 +37,7 @@ void test_box_filter_kxk()
// Intialize input data // Intialize input data
int src_width = 12; int src_width = 12;
int src_height = 8; int src_height = 8;
std::vector<uint16_t> src_data( src_width, src_height ); std::vector<uint16_t> src_data( src_width * src_height );
for ( int i = 0; i < src_width * src_height; ++i ) for ( int i = 0; i < src_width * src_height; ++i )
{ {
@ -68,9 +68,9 @@ void test_extract_rgb_from_bayer()
{ {
printf("\n###Test test_extract_rgb_from_bayer()###\n"); printf("\n###Test test_extract_rgb_from_bayer()###\n");
// Intialize input data // Intialize input data
int bayer_width = 20; int bayer_width = 24;
int bayer_height = 12; int bayer_height = 16;
std::vector<uint16_t> bayer_data( bayer_width, bayer_height ); std::vector<uint16_t> bayer_data( bayer_width * bayer_height );
for ( int i = 0; i < bayer_width * bayer_height; ++i ) for ( int i = 0; i < bayer_width * bayer_height; ++i )
{ {
@ -78,19 +78,22 @@ void test_extract_rgb_from_bayer()
} }
// Create input cv::mat // Create input cv::mat
cv::Mat bayer_img( bayer_height, bayer_width, CV_16U, bayer_data.data() ); cv::Mat bayer_img = cv::Mat( bayer_height, bayer_width, CV_16U, bayer_data.data() );
cv::Mat red_img, green_img1, green_img2, blue_img;
printf("\nbayer cv::Mat is \n"); printf("\nbayer cv::Mat is \n");
hdrplus::print_cvmat<uint16_t>( bayer_img ); hdrplus::print_cvmat<uint16_t>( bayer_img );
cv::Mat red_img, green_img, blue_img; hdrplus::extract_rgb_fmom_bayer<uint16_t>( bayer_img, red_img, green_img1, green_img2, blue_img );
hdrplus::extract_rgb_fmom_bayer<uint16_t>( bayer_img, red_img, green_img, blue_img );
printf("\nRed cv::Mat is \n"); printf("\nRed cv::Mat is \n");
hdrplus::print_cvmat<uint16_t>( red_img ); hdrplus::print_cvmat<uint16_t>( red_img );
printf("\nGreen cv::Mat is \n"); printf("\nGreen 1 cv::Mat is \n");
hdrplus::print_cvmat<uint16_t>( green_img ); hdrplus::print_cvmat<uint16_t>( green_img1 );
printf("\nGreen 2 cv::Mat is \n");
hdrplus::print_cvmat<uint16_t>( green_img2 );
printf("\nBlue cv::Mat is \n"); printf("\nBlue cv::Mat is \n");
hdrplus::print_cvmat<uint16_t>( blue_img ); hdrplus::print_cvmat<uint16_t>( blue_img );
@ -101,8 +104,8 @@ void test_extract_rgb_from_bayer()
int main() int main()
{ {
//test_box_filter_2x2(); test_box_filter_2x2();
//test_box_filter_kxk(); test_box_filter_kxk();
test_extract_rgb_from_bayer(); test_extract_rgb_from_bayer();
printf("\ntest_utility finish\n"); printf("\ntest_utility finish\n");

Loading…
Cancel
Save