去年就学过一段时间Opencv,不过长时间不用就生疏了,现在学习加记录一些,加深印象的同时也可以加深理解。
1 imread()//图片载入 2 cvtcolor()//图片修改颜色---新版本 3 cvcvtcolor()//图片修改颜色---旧版本 4 imshow()//图片显示 5 imwrite()//图片保存
旧版本:运行奔溃,最好别用老版本的函数,数据转换太麻烦
1 #include<iostream> 2 #include <opencv2/highgui/highgui.hpp> 3 //#include <opencv2/opencv.hpp>// 4 using namespace cv; 5 int main(int argc,char**argv) 6 { 7 Mat input_image = imread("9.jpg"); 8 namedWindow("test",WINDOW_AUTOSIZE); 9 if (input_image.empty()) return -1; 10 imshow("test",input_image); 11 waitKey(0); 12 const CvArr*src = (CvArr*)&input_image;//Mat->CvArr 13 CvArr *output_image = &src; 14 namedWindow("output", WINDOW_AUTOSIZE); 15 cvCvtColor(src, output_image,CV_BGR2GRAY);//这里老是奔溃,原因应该是格式不匹配,看源代码的Assert处编译不通过 16 17 //Mat m = cvarrToMat(output_image, true);//Mat->CvArr
18 19 //imshow("output", m); 20 waitKey(0); 21 return 0; 22 }
新版本:很简单的编译通过
1 #include<iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace cv; 4 int main(int argc,char**argv) 5 { 6 Mat input_image = imread("9.jpg"); 7 namedWindow("test",WINDOW_AUTOSIZE); 8 if (input_image.empty()) return -1; 9 imshow("test",input_image); 10 waitKey(0); 11 Mat output_image; 12 cvtColor(input_image,output_image,CV_BGR2GRAY); 13 namedWindow("output", WINDOW_AUTOSIZE); 14 imshow("output", output_image); 15 waitKey(0); 16 return 0; 17 }
源代码:旧代码转换格式之后直接调用新代码Mat类,所以根本没必要用旧代码了
1 cvCvtColor( const CvArr* srcarr, CvArr* dstarr, int code ) 2 { 3 cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0; 4 CV_Assert( src.depth() == dst.depth() ); 5 6 cv::cvtColor(src, dst, code, dst.channels()); 7 CV_Assert( dst.data == dst0.data ); 8 }
时间: 2024-10-22 23:32:53