C++?opencv學習之圖像像素的邏輯操作
1.API和相關知識
1. rectangele 繪制矩形
共7個參數(shù)
第1個參數(shù) 輸入
第2個參數(shù) 矩形左上坐標
第3個參數(shù) 矩形右下坐標
第4個參數(shù) 矩形顏色
第5個參數(shù) 線寬
如果參數(shù) >=0,則表示繪制矩形(如為1,表示繪制的矩形邊為1個像素)
如果參數(shù) < 0,則表示填充矩形(如-1,表示填充整個矩形)
第6個參數(shù) lineType
關于圖像鋸齒,有幾種方式處理
不管不顧,就用LINE_4 或者 LINE_8
消除鋸齒,就用LINE_AA (AA就是反鋸齒)
第7個參數(shù) 縮小圖像,同時縮短矩形左上頂點與(0,0)位置的距離(一般沒用)
0表示不變
1表示圖像*1/2,同時距離(0,0)的x方向和y方向距離*1/2
2表示圖像*(1/2)^2,同時距離(0,0)的x方向和y方向距離*(1/2)^2
第二種
rectangele
繪制矩形
共6個參數(shù)
第1個參數(shù) 輸入
第2個參數(shù) 矩形的左上點+往對角方向延伸的距離(x1,x2,延伸長度1,延伸長度2)
第3個參數(shù) 矩形顏色
第4個參數(shù) 線寬
如果參數(shù) >=0,則表示繪制矩形(如為1,表示繪制的矩形邊為1個像素)
如果參數(shù) < 0,則表示填充矩形(如-1,表示填充整個矩形)
第5個參數(shù) lineType
關于圖像鋸齒,有幾種方式處理
不管不顧,就用LINE_4 或者 LINE_8
消除鋸齒,就用LINE_AA (AA就是反鋸齒)
第6個參數(shù) 縮小圖像,同時縮短矩形左上頂點與(0,0)位置的距離
0表示不變
1表示圖像*1/2,同時距離(0,0)的x方向和y方向距離*1/2
2表示圖像*(1/2)^2,同時距離(0,0)的x方向和y方向距離*(1/2)^2
void QuickDemo::bitwise_demo(Mat& image) { Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3); Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3); //rectangle有兩種傳參方式,這里分別進行了示范 rectangle(m1, Point(100, 100), Point(180, 180), Scalar(255, 255, 0), -1, LINE_8,0); rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0); imshow("m1", m1); imshow("m2", m2); }
2.位運算
在opencv中,圖像的為運算有4種
- 與
- 或
- 非
- 異或
bitwise_and(m1, m2, dst);
//bitwise_or(m1, m2, dst);
//bitwise_not(m1, dst);
//bitwise_xor(m1, m2, dst);略
2.實例代碼
void QuickDemo::bitwise_demo(Mat& image) { Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3); Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3); rectangle(m1, Point(100, 100), Point(180, 180), Scalar(255, 255, 0), -1, LINE_4,0); rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, 0); Mat dst; bitwise_and(m1, m2, dst); //bitwise_or(m1, m2, dst); //bitwise_not(m1, dst); //bitwise_xor(m1, m2, dst); imshow("位運算",dst); }
補充:OpenCV--C++圖像像素處理-二值化
#include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace std; using namespace cv; int main() { Mat img = imread("colors.jpg"); if (img.empty()) { cout << "圖片讀取失敗" << endl; } Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); //將RGB圖像img轉(zhuǎn)為灰度圖gray // 彩圖BINARY二值化 Mat binary, binary_inv; threshold(img, binary, 125, 255, THRESH_BINARY); threshold(img, binary_inv, 125, 255, THRESH_BINARY_INV); imshow("binary", binary); imshow("binary_inv", binary_inv); //灰度圖BINARY二值化 Mat binary_gray, binary_gray_inv; threshold(gray, binary_gray, 125, 255,THRESH_BINARY); threshold(gray, binary_gray_inv,125, 255, THRESH_BINARY_INV); imshow("binary_gray", binary_gray); imshow("binary_gray_inv", binary_gray_inv); //灰度圖TOZERO二值化 Mat tozero_gray, tozero_gray_inv; threshold(gray, tozero_gray, 125, 255, THRESH_TOZERO); threshold(gray, tozero_gray_inv, 125, 255, THRESH_TOZERO_INV); imshow("tozero_gray", binary_gray); imshow("tozero_gray_inv", binary_gray_inv); //灰度圖TRUNC二值化 Mat trunc_gray; threshold(gray, trunc_gray, 125, 255, THRESH_TRUNC); imshow("trunc_gray", trunc_gray); Mat gray_thr = imread("colors.jpg", IMREAD_GRAYSCALE); //灰度圖OSTU二值化 Mat otsu_gray; threshold(gray_thr, otsu_gray, 100, 255,THRESH_BINARY | THRESH_OTSU); imshow("trunc_gray", otsu_gray); //灰度圖triangle二值化 Mat triangle_gray; threshold(gray_thr, triangle_gray, 100, 255, THRESH_BINARY | THRESH_TRIANGLE); imshow("triangle_gray", triangle_gray); //灰度圖自適應二值化 Mat adapt_mean_gray; adaptiveThreshold(gray_thr, adapt_mean_gray, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 55, 0); imshow("adapt_mean_gray", adapt_mean_gray); Mat adapt_gauss_gray; adaptiveThreshold(gray_thr, adapt_gauss_gray, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 55, 0); imshow("adapt_gauss_gray", adapt_gauss_gray); waitKey(0); return 0; }
總結(jié)
到此這篇關于C++ opencv學習之圖像像素的邏輯操作的文章就介紹到這了,更多相關C++ opencv圖像像素邏輯操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
淺談C++內(nèi)存分配及變長數(shù)組的動態(tài)分配
下面小編就為大家?guī)硪黄獪\談C++內(nèi)存分配及變長數(shù)組的動態(tài)分配。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09C++實現(xiàn)LeetCode(111.二叉樹的最小深度)
這篇文章主要介紹了C++實現(xiàn)LeetCode(111.二叉樹的最小深度),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07C++右值引用與移動構(gòu)造函數(shù)基礎與應用詳解
左值和右值都是針對表達式,左值是指表達式結(jié)束后依然存在的持久對象,右值是指表達式結(jié)束時就不再存在的臨時對象,下面這篇文章主要給大家介紹了關于C++11右值引用和移動語義的相關資料,需要的朋友可以參考下2023-02-02