OpenCV——修改图像像素(随心所欲)

这一节将讲述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), 3, CV_AA);
        //line(frame, pt1, pt2, Scalar(0, 0, 255), 10 CV_AA);
		/
        line(frame, pt1, pt2, Scalar(0, 0, 255), 10 CV_AA);
 

3.视频截图(宽度为10)


OK,结束

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱多多先森

你的鼓励,是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值