實(shí)驗(yàn)環(huán)境
Windows操作系統(tǒng)画侣、Visual Studio 2015湿蛔、OpenCV 3.2.0
安裝OpenCV
從官方網(wǎng)站下載OpenCV的最新版本怎燥,這次版本是3.2.0荠锭。
注:從Chrome下載會(huì)碰到下載的安裝包不完整的情況呼股,同時(shí)Chrome不支持?jǐn)帱c(diǎn)續(xù)傳耕魄,所以推薦用迅雷進(jìn)行下載,下載方法:在Chrome下載目錄中找到OpenCV的下載鏈接彭谁,打開(kāi)迅雷新建任務(wù)即可屎开。
Hello,OpenCV
使用OpenCV 3.2.0的配置過(guò)程
右鍵項(xiàng)目->屬性,將配置改成所有配置马靠,將平臺(tái)改為所有平臺(tái)奄抽;
在左側(cè)目錄欄中選擇VC++目錄,在右側(cè)的包含目錄下拉項(xiàng)中點(diǎn)選編輯甩鳄,在彈出的窗口中添加三個(gè)工作路徑:
opencv/build/include opencv/build/include/opencv opencv/build/include/opencv2
在庫(kù)目錄中逞度,添加兩個(gè)工作路徑
opencv/build/x64/vc14 opencv/build/x64/vc14/lib
接下來(lái),在左側(cè)找到鏈接器->輸入妙啃,在右側(cè)的附件依賴項(xiàng)中添加需要鏈接到的OpenCV庫(kù)(lib.)文件
注:在VS2015以及OpenCV3.2.0的條件下档泽,只需要添加一個(gè)庫(kù)文件opencv_world320d.lib即可之后即可以編譯運(yùn)行程序俊戳,不過(guò)需要將程序需要的動(dòng)態(tài)鏈接庫(kù)(.dll)放在和可執(zhí)行程序(.exe)同一目錄下,否則不能運(yùn)行馆匿。
操作OpenCV數(shù)據(jù)
使用image.at<...>()訪問(wèn)圖像中的像素
image.at<Vec3b>(i, j)
圖像的通道數(shù)為4(png圖像抑胎,RGBA,A為透明度)
遍歷image的像素渐北,將圖片的白色部分修改為黑色
Vec3b black = { 0, 0, 0 };
Vec3b white = { 0xff, 0xff, 0xff };
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++) {
if (image.at<Vec3b>(i, j) == white)
image.at<Vec3b>(i, j) = black;
}
}
}
圖像的長(zhǎng)和矩陣的行數(shù)是一樣的阿逃,圖像的寬乘以通道數(shù)就是矩陣的列數(shù)。
修改程序赃蛛,將image反色
Mat reverse(image.size(), image.type(), Scalar(255, 255, 255));
image = reverse - image;
方法就是新建一個(gè)和image大小一樣但是全白色的新矩陣恃锉,然后用新矩陣去減image得到反色的image
構(gòu)造矩陣,并計(jì)算其逆矩陣
Mat Mat32(32, 32, CV_32FC1);
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
if (i == j)Mat32.at<float>(i, j) = 2;
else if (i - 1 == j || i + 1 == j)Mat32.at<float>(i, j) = -1;
else Mat32.at<float>(i, j) = 0;
}
}
Mat32 = Mat32.inv();
Mat result;
normalize(Mat32, result, 1.0, 0.0, CV_MINMAX);
normalize函數(shù)就是用來(lái)重新映射得到灰度圖的方法呕臂。將最小值設(shè)為黑破托,最大值設(shè)為白。