add green channel

main
Xiao Song 3 years ago
parent 0bdbec495d
commit cd4f969ffe

6
.gitignore vendored

@ -56,4 +56,8 @@ tests/test_burst
.vscode/
# VS Settings
CMakeSettings.json
CMakeSettings.json
# Xiao local files
debug/

@ -163,7 +163,7 @@ void print_cvmat( cv::Mat image )
*/
template <typename T>
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;
int bayer_width = bayer_img.size().width;
@ -178,13 +178,15 @@ void extract_rgb_fmom_bayer( const cv::Mat& bayer_img, \
// RGB image is half the size of bayer image
int rgb_width = bayer_width / 2;
int rgb_height = bayer_height / 2;
red_img.create( rgb_height, rgb_width, bayer_img.type() );
green_img.create( rgb_height, rgb_width, bayer_img.type() );
blue_img.create( rgb_height, rgb_width, bayer_img.type() );
red_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() );
int rgb_step = red_img.step1();
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;
for ( int rgb_row_i = 0; rgb_row_i < rgb_height; rgb_row_i++ )
@ -197,9 +199,10 @@ void extract_rgb_fmom_bayer( const cv::Mat& bayer_img, \
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 ) ];
g_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset1 + ( 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 ) ];
r_img_ptr[ rgb_row_i_offset + rgb_col_j ] = bayer_img_ptr[ bayer_row_i_offset1 + ( rgb_col_j * 2 + 0 ) ];
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 ) ];
}
}
}

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

Loading…
Cancel
Save