********************** 鎿嶄綔鍥惧儚 ********************** .. highlight:: cpp 杈撳叆/杈撳嚭 ============ 鍥惧儚 ------ 浠庢枃浠朵腑璇诲叆涓€鍓浘鍍忥細 :: Mat img = imread(filename) 濡傛灉浣犺鍏ヤ竴涓猨pg鏂囦欢锛岀己鐪佹儏鍐典笅灏嗗垱寤轰竴涓�3閫氶亾鍥惧儚銆傚鏋滀綘闇€瑕佺伆搴︼紙鍗曢€氶亾锛夊浘鍍忥紝浣跨敤濡備笅璇彞锛� :: Mat img = imread(filename, 0); 灏嗗浘鍍忎繚瀛樺埌涓€涓枃浠讹細 :: Mat img = imwrite(filename); XML/YAML -------- TBD 鍩烘湰鍥惧儚鎿嶄綔 ============================ 鑾峰彇鍍忕礌鐨勪寒搴﹀€� -------------------------------- 瑕佽幏鍙栧儚绱犵殑浜害鍊硷紝浣犲繀椤荤煡閬撳浘鍍忕殑绫诲瀷鍜岄€氶亾鐨勬暟鐩€傚涓嬩緥瀛愬睍绀轰簡鑾峰彇鍗曢€氶亾鐏板害鍥撅紙绫诲瀷 8UC1锛夌殑(x, y)浣嶇疆澶勭殑鍍忕礌鍊硷細 :: Scalar intensity = img.at<uchar>(x, y); ``intensity.val[0]`` 涓繚瀛樹粠0鍒�255鐨勫€笺€傜幇鍦ㄦ垜浠湅涓€涓�3閫氶亾鍥惧儚濡備綍鑾峰彇鍍忕礌鍊硷紝棰滆壊椤哄簭涓� ``BGR`` 锛� ``imread`` 杩斿洖鐨勭己鐪侀『搴�)锛� :: Vec3b intensity = img.at<Vec3b>(x, y); uchar blue = intensity.val[0]; uchar green = intensity.val[1]; uchar red = intensity.val[2]; 浣犲彲浠ヤ娇鐢ㄥ悓鏍风殑鏂规硶澶勭悊娴偣鍥惧儚锛堜緥濡傞€氬涓€涓�3閫氶亾鍥惧儚杩涜Sobel杩愮畻寰楀埌鐨勬诞鐐瑰浘鍍忥級锛� :: Vec3f intensity = img.at<Vec3f>(x, y); float blue = intensity.val[0]; float green = intensity.val[1]; float red = intensity.val[2]; 鍚屾牱鐨勬柟娉曚篃鍙敤浜庡儚绱犲€肩殑淇敼锛� :: img.at<uchar>(x, y) = 128; 涓€浜汷penCV鍑芥暟锛屼緥濡俢alib3d妯″潡涓殑 ``projectPoints`` 鍑芥暟锛岄渶瑕佷互 ``Mat`` 鐨勬牸寮忚緭鍏ヤ簩缁存垨鑰呬笁缁寸殑鐐广€傝繖鏍风殑鐭╅樀蹇呴』鏈変笖浠呮湁涓€鍒楋紝杩欐牱姣忚瀵瑰簲涓€涓偣锛岀煩闃电被鍨嬮渶瑕佹槸32FC2鎴栬€�32FC3銆傝繖鏍风殑鐭╅樀鍙互寰堝鏄撶殑浠� ``std::vector`` 杞崲鑰屾潵锛� :: vector<Point2f> points; //... fill the array Mat pointsMat = Mat(points); 鎮ㄤ篃鍙互閫氳繃 ``Mat::at`` 鏂规硶鏉ヨ鍐欑煩闃典腑鐨勪竴涓厓绱狅細 :: Point2f point = pointsMat.at<Point2f>(i, 0); 鍐呭瓨绠$悊鍜屽弬鑰冭鏁�(reference counting) ---------------------------------------- ``Mat`` 鍐呭瓨鍌ㄤ簡鐭╅樀/鍥惧儚鐨勫睘鎬�(琛屾暟锛屽垪鏁帮紝鏁版嵁绫诲瀷绛�)浠ュ強涓€涓寚鍚戞暟鎹殑鎸囬拡銆傚洜姝ゅ嚑涓� ``Mat`` 瀹炰緥鍙互鎸囧悜鍚屼竴涓暟鎹€� ``Mat`` 涓繕璁板綍浜嗗弬鑰冭鏁�(reference count)锛岃繖鏍峰湪 ``Mat`` 琚噴鏀炬椂灏辩煡閬撴槸鍚﹂渶瑕侀噴鏀炬暟鎹€傝繖鍎挎槸涓€涓笉闇€澶嶅埗鏁版嵁灏卞垱寤轰袱涓煩闃电殑渚嬪瓙锛� :: std::vector<Point3f> points; // .. fill the array Mat pointsMat = Mat(points).reshape(1); 杩欐牱鎴戜滑寰楀埌浜嗕竴涓�3鍒楃殑32FC1鐭╅樀锛岃€屼笉鏄�1鍒楃殑32FC3鐭╅樀銆� ``pointsMat`` 浣跨敤 ``points`` 鐨勬暟鎹紝涓斿綋瀹冮噴鏀炬椂涓嶄細鏄惁鏁版嵁銆傚湪杩欎釜渚嬪瓙涓紝寮€鍙戣€呴渶瑕佺煡閬� ``points`` 鐨勭敓鍛芥瘮 ``pointsMat`` 闀裤€傚鏋滄垜浠渶瑕佸鍒舵暟鎹紝閭d箞璇蜂娇鐢� ``Mat::copyTo`` 鎴� ``Mat::clone`` 锛� :: Mat img = imread("image.jpg"); Mat img1 = img.clone(); 鍦– API涓紝寮€鍙戣€呭繀椤诲疄鐜板垱寤鸿緭鍑哄浘鍍忕劧鍚庡啀璋冪敤鍑芥暟銆備笌涔嬬浉姣斾笉鍚岀殑鏄疌++ API鏀寔绌虹殑 ``Mat`` 绫诲瀷鐨勮緭鍑哄弬鏁般€侰++ API浼氳皟鐢� ``Mat::create`` 鍒涘缓缁撴灉鐭╅樀銆傚鏋滅煩闃垫槸绌虹殑锛岄偅灏嗕細鐢宠鏁版嵁绌洪棿锛涘鏋滈潪绌猴紝涓斿ぇ灏忓拰绫诲瀷绗﹀悎瑕佹眰锛屽垯璇ュ嚱鏁颁笉鍋氫换浣曚簨鎯咃紱濡傛灉澶у皬鎴栫被鍨嬩笉绗﹀悎瑕佹眰锛屽師鏉ョ殑鏁版嵁浼氳閲婃斁锛岀劧鍚庣敵璇锋柊鐨勬暟鎹┖闂淬€備緥濡傦細 :: Mat img = imread("image.jpg"); Mat sobelx; Sobel(img, sobelx, CV_32F, 1, 0); 搴曞眰鎿嶄綔 -------------------- 涓虹煩闃靛畾涔変簡涓€绯诲垪鏂逛究鐨勬搷浣滅銆傛垜浠彲浠ュ皢涓€涓凡缁忓瓨鍦ㄧ殑鐏板害鍥惧儚 ``img`` 鍙樻垚鍏ㄩ粦鑹诧細 :: img = Scalar(0); 閫夋嫨鎰熷叴瓒e尯鍩燂細 :: Rect r(10, 10, 100, 100); Mat smallImg = img(r); 灏� ``Mat`` 杞负 C API 鏁版嵁绫诲瀷锛� :: Mat img = imread("image.jpg"); IplImage img1 = img; CvMat m = img; 娉ㄦ剰姝ゅ鏃犳暟鎹鍒舵搷浣溿€� 灏嗗僵鑹插浘鍍忚浆涓虹伆搴﹀浘鍍忥細 :: Mat img = imread("image.jpg"); // loading a 8UC3 image Mat grey; cvtColor(img, grey, CV_BGR2GRAY); 灏嗗浘鍍忕殑绫诲瀷浠�8UC1杞负32FC1锛� :: src.convertTo(dst, CV_32F); 鏄剧ず鍥惧儚 ------------------ 鍦ㄧ畻娉曞紑鍙戣繃绋嬩腑锛屾煡鐪嬬畻娉曠殑涓棿缁撴灉鏄潪甯告湁鐢ㄧ殑銆侽penCV鎻愪緵浜嗘柟渚挎煡鐪嬪浘鍍忕殑鏂规硶銆傜被鍨嬩负 ``8U`` 鐨勫浘鍍忓彲浠ヤ娇鐢ㄥ涓嬫柟娉曟樉绀猴細 :: Mat img = imread("image.jpg"); namedWindow("image", CV_WINDOW_AUTOSIZE); imshow("image", img); waitKey(); 璋冪敤 ``waitKey()`` 浼氳繘鍏ヤ竴涓秷鎭惊鐜紝鏉ョ瓑寰� ``image`` 绐楀彛涓婄殑鎸夐敭鍔ㄤ綔銆� 绫诲瀷涓� ``32F`` 鐨勫浘鍍忛渶瑕佽浆涓� ``8U`` 绫诲瀷銆傚涓嬶細 :: Mat img = imread("image.jpg"); Mat grey; cvtColor(img, grey, CV_BGR2GREY); Mat sobelx; Sobel(grey, sobelx, CV_32F, 1, 0); double minVal, maxVal; minMaxLoc(sobelx, &minVal, &maxVal); //find minimum and maximum intensities Mat draw; sobelx.convertTo(draw, CV_8U, 255.0/(maxVal - minVal), -minVal); namedWindow("image", CV_WINDOW_AUTOSIZE); imshow("image", draw); waitKey(); 缈昏瘧 ====================== 浜庝粫鐞� http://www.opencv.org.cn