OpenCV实践之路——矩形图片的对角线分割

55 篇文章 205 订阅
45 篇文章 6 订阅


本文由@星沉阁冰不语出品,转载请注明作者和出处。

文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/50709047

微博:http://weibo.com/xingchenbing 


在假期之前曾试图实现矩形图片对角线分割这么一个简单的任务。结果正方形的实现了,详见 OpenCV实践之路——方形图片对角线切割。矩形的时候总是出现一些我不能理解的错误,大概值指针越界之类的。当时对于图像像素边界的理解非常有限,这就是所谓的历史局限性吧。今天借助IamgeWatch对像素进行了深入的探究之后,详见OpenCV实践之路——像素初探。对于像素操作的理解前所未有地清晰。于是再次去实现了一下矩形对角分割。

其实思想很简单,只是由于当时我水平还不够才觉得很难。就是做出对角线,然后判断,如果某一点在直线这一片,复制到image1,否则复制到image2。对于没有值另外一半,给其赋个值。我是选择的喵星人眼睛的颜色赋值的。

代码很简单:

#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>

using namespace cv;
using namespace std;

int main(int argc,char* argv[])
{
	Mat image = imread(argv[1]);	
	int x1 = 0, y1 = 0;
	int x2 = image.cols - 1, y2 = image.rows-1;
	
	Mat image1(image.rows, image.cols, CV_8UC3, Scalar(180,120,50));
	Mat image2(image.rows, image.cols, CV_8UC3, Scalar(180, 120, 50));

	for (int x = 0; x < image.cols; x++)
	{
		for (int y = 0; y < image.rows; y++)
		{	
			//如果在直线之下,赋值到image1,注意图片的坐标系y是越向下越大的
			if ((y - y2)*(x1 - x2) - (x - x2)*(y1 - y2) >= 0)
			{
				image1.at<Vec3b>(Point(x, y)) = image.at<Vec3b>(Point(x, y));
			}

			//如果在直线之上,复制到image2
			else
			{
				image2.at<Vec3b>(Point(x, y)) = image.at<Vec3b>(Point(x, y));
			}		
		}
	}
	imshow("image", image);
	imshow("image1", image1);
	imshow("image2", image2);

	while (char(waitKey(1)) != 'q'){}
	return 0;
	
}


效果如下图:





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值