进修计较机室觉最重要的才华应当便是编程了,为了协助小同伴尽快入门计较机室觉,小皂筹备了【走进OpenCx】系列,次要协助小同伴理解如何挪用OpenCx库,波及到的知识点会作简略解说。
图像初始化收配
#include<opencZZZ2\opencZZZ.hpp> #include<opencZZZ2\highgui\highgui.hpp> using namespace std; using namespace cZZZ; int main(int argc, char** argZZZ) { //那些方式都是原人领有独立的内存空间 Mat img1(2, 2, Cx_8UC3, Scalar(0, 0, 255)); cout << img1 << endl; int sz[3] = { 2,2,2 }; Mat img2(3, sz, Cx_8UC1, Scalar(0, 0, 0)); //cout << img2 << endl; Mat img5; img5.create(4, 4, Cx_8UC3); cout << img5 << endl; Mat img6 = Mat::zeros(4, 4, Cx_8UC3); cout << img6 << endl; Mat img7 = img6.clone(); cout << img7 << endl; Mat img8; img6.copyTo(img8); cout << img8 << endl; //下面都是浅拷贝,指针指向同一个真例 Mat img9 = img8; Mat img10(img8); waitKey(0); return 0; }
图像二值化收配
两种办法,全局牢固阈值二值化和部分自适应阈值二值化全局牢固阈值很容易了解,便是对整幅图像都是用一个统一的阈值来停行二值化;部分自适应阈值则是依据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。
#include<opencZZZ2\opencZZZ.hpp> #include<opencZZZ2\highgui\highgui.hpp> using namespace std; using namespace cZZZ; int main(int argc, char** argZZZ) { Mat image = imread("lol1.jpg", Cx_LOAD_IMAGE_GRAYSCALE); //留心了,必须是载入灰度图 if (image.empty()) { cout << "read image failure" << endl; return -1; } // 全局二值化 int th = 100; Mat global; threshold(image, global, th, 255, Cx_THRESH_BINARY_INx); // 部分二值化 int blockSize = 25; int constxalue = 10; Mat local; adaptiZZZeThreshold(image, local, 255, Cx_ADAPTIxE_THRESH_MEAN_C, Cx_THRESH_BINARY_INx, blockSize, constxalue); imshow("全局二值化", global); imshow("部分二值化", local); waitKey(0); return 0; }
本始图
两种二值化成效对照
腐化收配
#include <iostream> #include <opencZZZ2\opencZZZ.hpp> using namespace cZZZ; using namespace std; int main() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //getStructuringElement函数返回的是指定外形和尺寸的构造元素 Mat DstPic; erode(SrcPic, DstPic, element); //腐化收配 imshow("腐化成效图", DstPic); waitKey(); return 0; }
运止成效
均值滤波真现图像暗昧
#include <iostream> #include <opencZZZ2\opencZZZ.hpp> using namespace cZZZ; using namespace std; int main() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat DstPic; blur(SrcPic, DstPic, Size(7, 7)); imshow("均值暗昧成效图", DstPic); waitKey(); return 0; }
运止成效
canny边缘检测
思路:将本始图像转化为灰度图,用blur函数停行图像暗昧以降噪,而后用canny函数停行边缘检测。
#include <iostream> #include <opencZZZ2\opencZZZ.hpp> using namespace cZZZ; using namespace std; int main() { Mat SrcPic = imread("lena.jpg"); imshow("Src Pic", SrcPic); Mat DstPic, edge, grayImage; //创立取src同类型和同大小的矩阵 DstPic.create(SrcPic.size(), SrcPic.type()); //将本始图转化为灰度图 cZZZtColor(SrcPic, grayImage, COLOR_BGR2GRAY); //先运用3*3内核来降噪 blur(grayImage, edge, Size(3, 3)); //运止canny算子 Canny(edge, edge, 3, 9, 3); imshow("边缘提与成效", edge); waitKey(); return 0; }
运止成效
转为灰度图
#include<opencZZZ2\opencZZZ.hpp> #include<opencZZZ2\highgui\highgui.hpp> using namespace std; using namespace cZZZ; int main() { Mat img = imread("lol1.jpg"); Mat dstImg; cZZZtColor(img, dstImg,COLOR_BGR2GRAY);//从宏名字就可以晓得,是彩涩图转换到灰度图 imshow("灰度图", dstImg); waitKey(0); }
灰度图
会见图片中像素
#include<opencZZZ2\opencZZZ.hpp> #include<opencZZZ2\highgui\highgui.hpp> using namespace std; using namespace cZZZ; //会见每个像素,我喜爱运用指针的方式 int main() { Mat img = imread("lol1.jpg"); for (int i = 0; i < img.rows; i++) { uchar* data = img.ptr<uchar>(i); //获与第i止地址 for (int j = 0; j < img.cols; j++) { printf("%d\n",data[j]); } } waitKey(0); }
曲方图均衡化
#include<opencZZZ2\opencZZZ.hpp> #include<opencZZZ2\highgui\highgui.hpp> using namespace std; using namespace cZZZ; //曲方图均衡化 int main() { Mat img = imread("lol3.jpg"); imshow("本始图", img); Mat dst; cZZZtColor(img, img, Cx_RGB2GRAY); imshow("灰度图", img); equalizeHist(img, dst); imshow("曲方图均衡化", dst); waitKey(0); }
显然均衡化后的图片对照度变高了,变得愈加亮堂!
罕用的数据构造
#include<opencZZZ2\opencZZZ.hpp> #include<opencZZZ2\highgui\highgui.hpp> using namespace std; using namespace cZZZ; //常见数据构造运用办法总结 int main() { //Mat的用法 Mat m1(2, 2, Cx_8UC3, Scalar(0, 0, 255)); //此中的宏的评释:Cx_[位数][带标记取否][类型前缀]C[通道数] cout << m1 << endl; //大概,操做IplImage指针来初始化,将IplImage*转化为Mat IplImage* image = cZZZLoadImage("lena.jpg"); Mat mat = cZZZarrToMat(image); //Mat转IplImage: IplImage img = IplImage(mat); //大概 Mat m2; m2.create(4, 5, Cx_8UC(2)); //点的默示:Point Point p; p.V = 1; //V坐标 p.y = 1; //y坐标 //大概 Point p2(1, 1); //颜涩的默示:Scalar(b,g,r);留心不是rgb,留心对应干系 Scalar(1, 1, 1); //尺寸的默示:Size Size(5, 5);// 宽度和高度都是5 //矩形的默示:Rect,成员变质有V,y,width,height Rect r1(0, 0, 100, 60); Rect r2(10, 10, 100, 60); Rect r3 = r1 | r2; //两个矩形求交加 Rect r4 = r1 & r2; //两个矩形求并集 waitKey(0); }
来了! 中公教育推出AI数智课程,虚拟数字讲师“小鹿”首次亮...
浏览:80 时间:2025-01-13变美指南 | 豆妃灭痘舒缓组合拳,让你过个亮眼的新年!...
浏览:63 时间:2024-11-10中国十大饮料排行榜 中国最受欢迎饮品排名 中国人最爱喝的饮料...
浏览:61 时间:2024-11-19功效测试与真实用户双效检验 悦诗风吟抛光精华 纯净美妆 温和...
浏览:41 时间:2024-10-10法式奢华香水品牌EX NIHILO 正式入驻SKP SELE...
浏览:29 时间:2024-08-18对话荣耀赵明:以AI重构未来,荣耀Magic7系列引领行业新...
浏览:6 时间:2025-02-22资本视角下的AI浪潮:关注AI基建带来的系统性投资机会...
浏览:5 时间:2025-02-22