资源简介
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\li
文件 2 2017-08-13 12:51 cartoon-master\cartoon\Debug\cartoon.tlog\li
文件 2 2017-08-13 12:51 cartoon-master\cartoon\Debug\cartoon.tlog\li
文件 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个文件信息
相关资源
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 火影忍者网站的设计与制作
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
- 基于Opencv实现的图像纠偏
评论
共有 条评论