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

来源:互联网 发布:软件费用摊销年限 编辑:程序博客网 时间:2024/05/17 23:10


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

文章链接: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));}//如果在直线之上,复制到image2else{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;}


效果如下图:





0 0
原创粉丝点击