• 大小: 6.65MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-25
  • 语言: 其他
  • 标签: opencv  动漫  风格化  

资源简介

opencv实现图片的风格化,针对任务效果不好,针对风景不错

资源截图

代码片段和文件信息

#include   
#include  
#include 
#include 
#include 

#include 

using namespace cv;
using namespace std;
void find_move_people();
IplImage *srcImage *cannyImage;
char *grayWindow *cannyWindow;
void canny();
void changeSImage(Mat &image IplImage &outImg float sRadio);
IplImage* catHSImage(CvMat* HSI_H CvMat* HSI_S CvMat* HSI_I);
IplImage* HSI2RGBImage(CvMat* HSI_H CvMat* HSI_S CvMat* HSI_I);
void pasteEdge(Mat &image Mat &outImg IplImage cannyImage);
void on_trackbar(int threshold)
{
// 灰度图,canny输出图,低阈值,高阈值,灰度梯度的算子内核大小
cvCanny(srcImage cannyImage threshold threshold * 3 3);
cvShowImage(cannyWindow cannyImage);
}
int main(void)
{
char *img = “data//3.jpg“;
Mat image = imread(img);

//canny边缘检测
srcImage = cvLoadImage(img CV_LOAD_IMAGE_GRAYSCALE);
cannyImage = cvCreateImage(cvGetSize(srcImage) IPL_DEPTH_8U 1);
int threshold = 70;
cvCanny(srcImage cannyImage threshold threshold * 3 3);

cvShowImage(“边缘“ cannyImage);
Mat pasteEdgeMat;
pasteEdge(image pasteEdgeMat *cannyImage);
// 显示将边缘贴在原图上
imshow(“canny贴图“ pasteEdgeMat);

// 双边滤波
Mat binateMat;
bilateralFilter(pasteEdgeMat binateMat 10 50 50 BORDER_DEFAULT);
//不贴边缘直接双边滤波
//bilateralFilter(image binateMat 10 50 50 BORDER_DEFAULT);
imshow(“原图“ image);
imshow(“双边滤波“ binateMat);

//增强图像的颜色饱和度
IplImage outImg;
changeSImage(binateMat outImg 5);
cvShowImage(“hsi2“ &outImg);
waitKey(0);
}

// 将边缘检测后的图 cannyImage 边以黑色的形式贴在 image上。
void pasteEdge(Mat &image Mat &outImg IplImage cannyImage)
{
Mat cannyMat;
cannyMat = cvarrToMat(&cannyImage);
//颜色反转
cannyMat = cannyMat < 100;
image.copyTo(outImg cannyMat);


}

// 将image 像素转化到 HSI 空间,并调整S 即颜色的饱和度,
void changeSImage(Mat &image IplImage &outImg float sRadio)
{
int rows = image.rows;
int cols = image.cols;
// 三个HSI空间数据矩阵
CvMat* HSI_H = cvCreateMat(rows cols CV_32FC1);
CvMat* HSI_S = cvCreateMat(rows cols CV_32FC1);
CvMat* HSI_I = cvCreateMat(rows cols CV_32FC1);

// 原始图像数据指针 HSI矩阵数据指针
uchar* data;

// rgb分量
int img_r img_g img_b;
int min_rgb;  // rgb分量中的最小值
// HSI分量
float fHue fSaturation fIntensity;
int channels = image.channels();
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
data = image.ptr(i);
data = data + j*channels;
img_b = *data;
data++;
img_g = *data;
data++;
img_r = *data;

// Intensity分量[0 1]
fIntensity = (float)((img_b + img_g + img_r) / 3) / 255;

// 得到RGB分量中的最小值
float fTemp = img_r < img_g ? img_r : img_g;
min_rgb = fTemp < img_b ? fTemp : img_b;
// Saturation分量[0 1]
fSaturation = 1 - (float)(3 * min_rgb) / (img_r + img_g + img_b);

// 计算theta角
float numerator = (img_r - img_g + img_r - img_b) / 2;
float denominator = sqrt(
pow((img_r - img_g) 2) + (img_r - img_b)*(img_g - img_b));

// 计算Hue分量
if (denominator != 0)
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-08-13 12:51  cartoon-master\
     文件         765  2017-08-13 12:51  cartoon-master\README.md
     文件    13959168  2017-08-13 12:51  cartoon-master\cartoon.sdf
     文件        1293  2017-08-13 12:51  cartoon-master\cartoon.sln
     文件       25088  2017-08-13 12:51  cartoon-master\cartoon.v12.suo
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\Debug\
     文件        3870  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.log
     文件      244055  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.obj
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\
     文件       12776  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\CL.read.1.tlog
     文件         688  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\CL.write.1.tlog
     文件         192  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\cartoon.lastbuildstate
     文件         826  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\cl.command.1.tlog
     文件           2  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\link.command.1.tlog
     文件           2  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\link.read.1.tlog
     文件           2  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\link.write.1.tlog
     文件           0  2017-08-13 12:51  cartoon-master\cartoon\Debug\cartoon.tlog\unsuccessfulbuild
     文件      420864  2017-08-13 12:51  cartoon-master\cartoon\Debug\vc120.idb
     文件      741376  2017-08-13 12:51  cartoon-master\cartoon\Debug\vc120.pdb
     文件        7234  2017-08-13 12:51  cartoon-master\cartoon\cartoon.vcxproj
     文件         923  2017-08-13 12:51  cartoon-master\cartoon\cartoon.vcxproj.filters
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\data\
     文件      152515  2017-08-13 12:51  cartoon-master\cartoon\data\1.JPG
     文件      151994  2017-08-13 12:51  cartoon-master\cartoon\data\2.JPG
     文件      140777  2017-08-13 12:51  cartoon-master\cartoon\data\3.JPG
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\x64\
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\x64\Debug\
     文件        3270  2017-08-13 12:51  cartoon-master\cartoon\x64\Debug\cartoon.log
     文件      298826  2017-08-13 12:51  cartoon-master\cartoon\x64\Debug\cartoon.obj
     目录           0  2017-08-13 12:51  cartoon-master\cartoon\x64\Debug\cartoon.tlog\
............此处省略18个文件信息

评论

共有 条评论