From a5b7d93c246190bec1b8c4d04585d7cca4758114 Mon Sep 17 00:00:00 2001 From: jack wong Date: Mon, 24 Apr 2017 15:44:17 +0800 Subject: [PATCH 1/2] fix colorReduce4 I've test it, origin code will generate a bad image. --- .../24_14WaysToAccessPixel.cpp" | 346 +++++++++--------- 1 file changed, 173 insertions(+), 173 deletions(-) diff --git "a/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" "b/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" index b48a94a..7e4440f 100644 --- "a/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" +++ "b/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" @@ -1,10 +1,10 @@ -//--------------------------------------【程序说明】------------------------------------------- -// 程序说明:《OpenCV3编程入门》OpenCV2版书本配套示例程序24 -// 程序描述:来自一本国外OpenCV2书籍的示例-遍历图像像素的14种方法 -// 测试所用IDE版本:Visual Studio 2010 -// 开发测试所用OpenCV版本: 3.0 beta -// 2014年12月 Revised by @浅墨_毛星云 +//--------------------------------------銆愮▼搴忚鏄庛------------------------------------------- +// 绋嬪簭璇存槑锛氥奜penCV3缂栫▼鍏ラ棬銆婳penCV2鐗堜功鏈厤濂楃ず渚嬬▼搴24 +// 绋嬪簭鎻忚堪锛氭潵鑷竴鏈浗澶朞penCV2涔︾睄鐨勭ず渚-閬嶅巻鍥惧儚鍍忕礌鐨14绉嶆柟娉 +// 娴嬭瘯鎵鐢↖DE鐗堟湰锛歏isual Studio 2010 +// 寮鍙戞祴璇曟墍鐢∣penCV鐗堟湰锛 3.0 beta +// 2014骞12鏈 Revised by @娴呭ⅷ_姣涙槦浜 //------------------------------------------------------------------------------------------------ @@ -26,8 +26,8 @@ \*------------------------------------------------------------------------------------------*/ -//---------------------------------【头文件、命名空间包含部分】----------------------------- -// 描述:包含程序所使用的头文件和命名空间 +//---------------------------------銆愬ご鏂囦欢銆佸懡鍚嶇┖闂村寘鍚儴鍒嗐----------------------------- +// 鎻忚堪锛氬寘鍚▼搴忔墍浣跨敤鐨勫ご鏂囦欢鍜屽懡鍚嶇┖闂 //------------------------------------------------------------------------------------------------- #include #include @@ -37,21 +37,21 @@ using namespace std; -//---------------------------------【宏定义部分】--------------------------------------------- -// 描述:包含程序所使用宏定义 +//---------------------------------銆愬畯瀹氫箟閮ㄥ垎銆--------------------------------------------- +// 鎻忚堪锛氬寘鍚▼搴忔墍浣跨敤瀹忓畾涔 //------------------------------------------------------------------------------------------------- #define NTESTS 14 #define NITERATIONS 20 -//----------------------------------------- 【方法一】------------------------------------------- -// 说明:利用.ptr 和 [] +//----------------------------------------- 銆愭柟娉曚竴銆------------------------------------------- +// 璇存槑锛氬埄鐢.ptr 鍜 [] //------------------------------------------------------------------------------------------------- void colorReduce0(Mat &image, int div=64) { - int nl= image.rows; //行数 - int nc= image.cols * image.channels(); //每行元素的总元素数量 + int nl= image.rows; //琛屾暟 + int nc= image.cols * image.channels(); //姣忚鍏冪礌鐨勬诲厓绱犳暟閲 for (int j=0; j(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF<(log(static_cast(div))/log(2.0)); - int step= image.step; //有效宽度 - //掩码值 - uchar mask= 0xFF<(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF<(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF<(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF<::iterator it= image.begin(); Mat_::iterator itend= image.end(); for ( ; it!= itend; ++it) { - //-------------开始处理每个像素------------------- + //-------------寮濮嬪鐞嗘瘡涓儚绱------------------- (*it)[0]= (*it)[0]/div*div + div/2; (*it)[1]= (*it)[1]/div*div + div/2; (*it)[2]= (*it)[2]/div*div + div/2; - //-------------结束像素处理------------------------ - }//单行处理结束 + //-------------缁撴潫鍍忕礌澶勭悊------------------------ + }//鍗曡澶勭悊缁撴潫 } -//-------------------------------------【方法十】----------------------------------------------- -// 说明:利用Mat_ iterator以及位运算 +//-------------------------------------銆愭柟娉曞崄銆----------------------------------------------- +// 璇存槑锛氬埄鐢∕at_ iterator浠ュ強浣嶈繍绠 //------------------------------------------------------------------------------------------------- void colorReduce9(Mat &image, int div=64) { - // div必须是2的幂 + // div蹇呴』鏄2鐨勫箓 int n= static_cast(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF<::iterator it= image.begin(); Mat_::iterator itend= image.end(); - //扫描所有元素 + //鎵弿鎵鏈夊厓绱 for ( ; it!= itend; ++it) { - //-------------开始处理每个像素------------------- + //-------------寮濮嬪鐞嗘瘡涓儚绱------------------- (*it)[0]= (*it)[0]&mask + div/2; (*it)[1]= (*it)[1]&mask + div/2; (*it)[2]= (*it)[2]&mask + div/2; - //-------------结束像素处理------------------------ - }//单行处理结束 + //-------------缁撴潫鍍忕礌澶勭悊------------------------ + }//鍗曡澶勭悊缁撴潫 } -//------------------------------------【方法十一】--------------------------------------------- -// 说明:利用Mat Iterator_ +//------------------------------------銆愭柟娉曞崄涓銆--------------------------------------------- +// 璇存槑锛氬埄鐢∕at Iterator_ //------------------------------------------------------------------------------------------------- void colorReduce10(Mat &image, int div=64) { - //获取迭代器 + //鑾峰彇杩唬鍣 Mat_ cimage= image; Mat_::iterator it=cimage.begin(); Mat_::iterator itend=cimage.end(); for ( ; it!= itend; it++) { - //-------------开始处理每个像素------------------- + //-------------寮濮嬪鐞嗘瘡涓儚绱------------------- (*it)[0]= (*it)[0]/div*div + div/2; (*it)[1]= (*it)[1]/div*div + div/2; (*it)[2]= (*it)[2]/div*div + div/2; - //-------------结束像素处理------------------------ + //-------------缁撴潫鍍忕礌澶勭悊------------------------ } } -//--------------------------------------【方法十二】-------------------------------------------- -// 说明:利用动态地址计算配合at +//--------------------------------------銆愭柟娉曞崄浜屻-------------------------------------------- +// 璇存槑锛氬埄鐢ㄥ姩鎬佸湴鍧璁$畻閰嶅悎at //------------------------------------------------------------------------------------------------- void colorReduce11(Mat &image, int div=64) { - int nl= image.rows; //行数 - int nc= image.cols; //列数 + int nl= image.rows; //琛屾暟 + int nc= image.cols; //鍒楁暟 for (int j=0; j(j,i)[0]= image.at(j,i)[0]/div*div + div/2; image.at(j,i)[1]= image.at(j,i)[1]/div*div + div/2; image.at(j,i)[2]= image.at(j,i)[2]/div*div + div/2; - //-------------结束像素处理------------------------ + //-------------缁撴潫鍍忕礌澶勭悊------------------------ - } //单行处理结束 + } //鍗曡澶勭悊缁撴潫 } } -//----------------------------------【方法十三】----------------------------------------------- -// 说明:利用图像的输入与输出 +//----------------------------------銆愭柟娉曞崄涓夈----------------------------------------------- +// 璇存槑锛氬埄鐢ㄥ浘鍍忕殑杈撳叆涓庤緭鍑 //------------------------------------------------------------------------------------------------- -void colorReduce12(const Mat &image, //输入图像 - Mat &result, // 输出图像 +void colorReduce12(const Mat &image, //杈撳叆鍥惧儚 + Mat &result, // 杈撳嚭鍥惧儚 int div=64) { - int nl= image.rows; //行数 - int nc= image.cols ; //列数 + int nl= image.rows; //琛屾暟 + int nc= image.cols ; //鍒楁暟 - //准备好初始化后的Mat给输出图像 + //鍑嗗濂藉垵濮嬪寲鍚庣殑Mat缁欒緭鍑哄浘鍍 result.create(image.rows,image.cols,image.type()); - //创建无像素填充的图像 + //鍒涘缓鏃犲儚绱犲~鍏呯殑鍥惧儚 nc= nc*nl; - nl= 1; //单维数组 + nl= 1; //鍗曠淮鏁扮粍 int n= static_cast(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF<(log(static_cast(div))/log(2.0)); - //掩码值 - uchar mask= 0xFF< Date: Mon, 24 Apr 2017 16:55:09 +0800 Subject: [PATCH 2/2] fix colorReduce7 Comment abundant & error process, changed line 278, 289. --- .../24_14WaysToAccessPixel.cpp" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" "b/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" index 7e4440f..3d56521 100644 --- "a/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" +++ "b/OpenCV3-examples/src/\343\200\2205\343\200\221\347\254\254\344\272\224\347\253\240/\343\200\22024\343\200\221\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_\351\201\215\345\216\206\345\233\276\345\203\217\345\203\217\347\264\240\347\232\20414\347\247\215\346\226\271\346\263\225/24_14WaysToAccessPixel.cpp" @@ -275,8 +275,8 @@ void colorReduce7(Mat &image, int div=64) { //-------------寮濮嬪鐞嗘瘡涓儚绱------------------- *data++= *data&mask + div/2; - *data++= *data&mask + div/2; - *data++= *data&mask + div/2; + //*data++= *data&mask + div/2; + //*data++= *data&mask + div/2; //-------------缁撴潫鍍忕礌澶勭悊------------------------