C++ 使用opencv从图像创建万花筒效果
我正在尝试使用opencv从图像创建一个万花筒,并试图掌握其中涉及的数学知识。我知道我必须将图像分割成碎片,反射图像并将其旋转60度,从而创建一个由6个三角形组成的多边形。我不理解的是如何分解图像,使用哪些图像片段,丢弃哪些图像片段。如果您有任何想法或链接,我们将不胜感激。数学部分似乎是您作业中的重要部分,因此我将由您决定。但是,如果您将问题向后考虑,可能会稍微容易一些。从万花筒分形图案开始,确定该图案中的每个片段是如何由原始图像创建的 一旦你有了模式,你所要做的就是制作一个映射,将模式中的每个像素映射到图像中的一个像素,并使用OpenCV函数来进行实际映射。你会发现一个使用OpenCV的示例实现C++ 使用opencv从图像创建万花筒效果,c++,opencv,C++,Opencv,我正在尝试使用opencv从图像创建一个万花筒,并试图掌握其中涉及的数学知识。我知道我必须将图像分割成碎片,反射图像并将其旋转60度,从而创建一个由6个三角形组成的多边形。我不理解的是如何分解图像,使用哪些图像片段,丢弃哪些图像片段。如果您有任何想法或链接,我们将不胜感激。数学部分似乎是您作业中的重要部分,因此我将由您决定。但是,如果您将问题向后考虑,可能会稍微容易一些。从万花筒分形图案开始,确定该图案中的每个片段是如何由原始图像创建的 一旦你有了模式,你所要做的就是制作一个映射,将模式中的每个
#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()
{
Mat img,img2,kal1(400,400,CV_8UC3,Scalar(0,0,0));
Mat kal2,add;
VideoCapture cap(0);
int i=0,j=0;
for(;;)
{
cap>>img;
resize(img,img,Size(400,400));
for(i=0;i<600;i++)
{
for(j=0;j<i/3;j++)
{
kal1.at<uchar>(Point(i,j))=img.at<uchar>(Point(i,j));//gives 1/8 of img
if(j>i)
{
continue;
}
}
}
flip(kal1,kal2,0);
addWeighted(kal1,1,kal2,1,0,add);
flip(kal2,kal2,1);
addWeighted(add,1,kal2,1,0,add);
flip(kal2,kal2,0);
addWeighted(add,1,kal2,1,0,add);
transpose(kal2,kal2);
addWeighted(add,1,kal2,1,0,add);
flip(kal2,kal2,0);
addWeighted(add,1,kal2,1,0,add);
flip(kal2,kal2,1);
addWeighted(add,1,kal2,1,0,add);
flip(kal2,kal2,0);
addWeighted(add,1,kal2,1,0,add);
line(img,Point(200,0),Point(200,200),Scalar(0,255,255),1);
line(img,Point(0,0),Point(200,200),Scalar(0,255,255),1);
moveWindow("img",30,30);
moveWindow("Kaleidoscope",500,30);
imshow("img",img);
imshow("Kaleidoscope",add);
waitKey(10);
}
return 1;
}
#包括
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main()
{
Mat-img,img2,kal1(400400,CV_8UC3,标量(0,0,0));
Mat kal2,添加;
视频捕获上限(0);
int i=0,j=0;
对于(;;)
{
cap>>img;
调整大小(img,img,Size(400400));
对于(i=0;除非您需要极高的分辨率或极高的精度,否则使用OpenGL可能比使用OpenCVI更容易。我同意,但这是一门计算机视觉课程,因此我必须使用opencv。嗯,我对opencv玩得不多,所以我在这方面帮不了什么忙,但在我看来,这是一个不切实际的任务/示例。计算机视觉是一个关于让计算机以某种方式理解物理世界。故意扭曲图像只会使目标更难实现。好吧,我要做的是切割一个等边三角形,然后围绕一个轴点旋转它,创建一个六边形。我可以创建两个循环,一个循环对应我想要的多边形行数,一个循环对应我想要的多边形行数多边形的列数。我想知道的是如何切割这个三角形。我知道我应该创建一个黑色图像并填充三角形所在的像素,但我对如何操作感到困惑。有什么想法吗?