OpenCV——修改影象畫素(隨心所欲)
阿新 • • 發佈:2019-01-09
這一節將講述OpenCV——修改影象畫素,根據自己需要新增特定的畫素部分
原圖如下,我們就是先在這個視訊流上新增一條直線段(有一定寬度的)現在我們想新增一條,135行-455行,列350--360的直線段
#include<opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture capture(0); while (1) { Mat frame; capture >> frame; //修改畫素,新增直線////////////////////// for (int i = 135; i < 455; ++i)//繪製行數 { for (int j = 350; j < 360; ++j)//繪製列數 { Vec3b pixel; pixel[0] = 0; pixel[1] = 0; pixel[2] = 255; frame.at<Vec3b>(i, j) = pixel; } } ///////////////////////////////////// namedWindow("視訊影象"); imshow("視訊影象", frame); waitKey(30); } return 0; }
視訊截圖如下
現在主要講一下修改畫素部分,程式碼段如下
//修改畫素,新增直線////////////////////// for (int i = 135; i < 455; ++i)//繪製行數 { for (int j = 350; j < 360; ++j)//繪製列數 { Vec3b pixel; pixel[0] = 0; //B畫素 pixel[1] = 0; //G畫素 pixel[2] = 255; //R畫素 frame.at<Vec3b>(i, j) = pixel; //畫素修改,講直線段部分繪製在frame影象上 } } /////////////////////////////////////
基本修改畫素部分也就這麼些。
下面重磅來襲,講前面兩個部落格內容整個在一起。。
現在我們要在原圖上-----------ROI區域擷取-----------繪製T字標記
其中T字標準如下圖(數字是畫素範圍,恕我懶了,應該也可以看懂)上程式碼(可直接執行)
#include<opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture capture(0); while (1) { Mat frame; capture >> frame; Mat roi = frame(Range(120, 476), Range(180, 476)); //修改畫素,新增直線////////////////////// for (int i = 155; i < 275; ++i)//繪製行數 { for (int j = 144; j < 150; ++j)//繪製列數 { Vec3b pixel; pixel[0] = 0; //B畫素 pixel[1] = 0; //G畫素 pixel[2] = 255; //R畫素 roi.at<Vec3b>(i, j) = pixel; //畫素修改,講直線段部分繪製在frame影象上 } } for (int i = 150; i < 155; ++i)//繪製行數 { for (int j = 77; j < 217; ++j)//繪製列數 { Vec3b pixel; pixel[0] = 255; pixel[1] = 0; pixel[2] = 0; roi.at<Vec3b>(i, j) = pixel; } } ///////////////////////////////////// namedWindow("視訊影象"); imshow("視訊影象", roi); waitKey(30); } return 0; }
視訊截圖如下
下面,再隨心所欲一下,在任意兩點Point pt1(x1,y1); Point pt2(x2, y2);之間繪製直線
程式碼段如下#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0);
while (1)
{
Mat frame;
capture >> frame;
//修改畫素,新增直線//////////////////////
Point pt1(30,80);
Point pt2(450, 480);
line(frame, pt1, pt2, Scalar(0, 0, 255), 1, CV_AA);
/////////////////////////////////////
namedWindow("視訊影象");
imshow("視訊影象", frame);
waitKey(30);
}
return 0;
}
1視訊截圖(寬度為1)
2視訊截圖(寬度為3)
兩點連線的程式碼段 如下
/////修改畫素,新增直線//////////////////////
Point pt1(30,80);
Point pt2(450, 480);
line(frame, pt1, pt2, Scalar(0, 0, 255), 1, CV_AA);
///line(frame, pt1, pt2, Scalar(0, 0, 255), 3, CV_AA);
/////line(frame, pt1, pt2, Scalar(0, 0, 255), 10 CV_AA);
/////////////////////////////////////
3視訊截圖(寬度為10)
OK,結束