参考:http://blog.csdn.net/xingchenbingbuyu/article/details/50719569
圆分割
今天继续昨天的对角分割,想到了分割出来一个圆形区域。于是就很简单的实现了一下。思想还是利用数学公式判断点是否在圆内还是圆外。
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc,char* argv[])
{
Mat image = imread("1.jpg");
Mat image1(image.rows, image.cols, image.type(), Scalar(180, 120, 50));
Mat image2(image.rows, image.cols, image.type(), Scalar(180, 120, 50));
Point center(image.cols/2,image.rows/2);
int radius = 200;
circle(image, center, radius, Scalar(0, 200, 100), 2, 8, 0);
for (int x = 0; x < image.cols; x++)
{
for (int y = 0; y < image.rows; y++)
{
int temp = ((x - center.x) * (x - center.x) + (y - center.y) *(y - center.y));
if (temp < (radius * radius)) // 圆内
{
image1.at<Vec3b>(Point(x, y))[0] = image.at<Vec3b>(Point(x, y))[0];
image1.at<Vec3b>(Point(x, y))[1] = image.at<Vec3b>(Point(x, y))[1];
image1.at<Vec3b>(Point(x, y))[2] = image.at<Vec3b>(Point(x, y))[2];
}
else //圆外
{
image2.at<Vec3b>(Point(x, y))[0] = image.at<Vec3b>(Point(x, y))[0];
image2.at<Vec3b>(Point(x, y))[1] = image.at<Vec3b>(Point(x, y))[1];
image2.at<Vec3b>(Point(x, y))[2] = image.at<Vec3b>(Point(x, y))[2];
}
}
}
imshow("image1", image1);
imshow("image2", image2);
while (uchar(waitKey() != 'q')) {}
return 0;
}
注意Point center(image.rows/2,image.cols/2)和Point center(image.cols/2,image.rows/2)的区别。后者才是中心点。
矩形分割
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc,char* argv[])
{
Mat image = imread("miao.jpg");
Mat image1(image.rows, image.cols, image.type(), Scalar(180, 120, 50));
Mat image2(image.rows, image.cols, image.type(), Scalar(180, 120, 50));
Point point1(140,40);
Point point2(470, 340);
for (int x = 0; x < image.cols; x++)
{
for (int y = 0; y < image.rows; y++)
{
if (point1.x <= x && x<=point2.x && point1.y<=y && y<=point2.y)
{
image1.at<Vec3b>(Point(x, y))[0] = image.at<Vec3b>(Point(x, y))[0];
image1.at<Vec3b>(Point(x, y))[1] = image.at<Vec3b>(Point(x, y))[1];
image1.at<Vec3b>(Point(x, y))[2] = image.at<Vec3b>(Point(x, y))[2];
}
else
{
image2.at<Vec3b>(Point(x, y))[0] = image.at<Vec3b>(Point(x, y))[0];
image2.at<Vec3b>(Point(x, y))[1] = image.at<Vec3b>(Point(x, y))[1];
image2.at<Vec3b>(Point(x, y))[2] = image.at<Vec3b>(Point(x, y))[2];
}
}
}
namedWindow("image1", 0);
namedWindow("image2", 0);
imshow("image", image);
imshow("image1", image1);
imshow("image2", image2);
while (uchar(waitKey() != 'q')) {}
return 0;
}