OpenCV中如何是颜色加深

xuxinqiujiao123 2012-09-09 05:30:40
有一幅图片是一份文件,我想让红色的文字更红,黑色的文字更黑,白色背景更白,请问应该怎么做呢?
我的OpenCV版本是2.1的,用的C++语言
...全文
1689 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuxinqiujiao123 2012-09-11
  • 打赏
  • 举报
回复
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int main( )
{
//彩色3通道
Mat src(3,4,CV_8UC3);
//用来存储目的图片的矩阵
Mat res(3,4,CV_8UC3);
src = imread("1.jpg", 1 );
// Mat r(3,4,CV_8UC1),g(3,4,CV_8UC1),b(3,4,CV_8UC1);
//Mat* src2;
//多通道分成3个单通道
//在OpenCV中,一张3通道图像的一个像素点是按BGR的顺序存储的。
//split(&b,&src2);
//split(&g,&r);
/*红:255,0,0(rgb)
0,240,120(hsv)
黑:0,0,0(RGB)
   160,0,0
白:255,255,255
  160,0,240*/
for(int i=0;i<src.rows;i++)
for(int j=0;j<src.cols;j++)
{
for(int k=0;k<src.channels();k++)
{
if(src.at<uchar>(i,j*src.channels()+k)<128)
src.at<uchar>(i,j*src.channels()+k)=0;
else src.at<uchar>(i,j*src.channels()+k)=255;
}
}
//src.reshape(36,0);
// 创建窗口显示图片
namedWindow( "src" );
//namedWindow("result");
imwrite("jiashen.jpg",res);
imshow("src",src);
//imshow("result",res);
waitKey();
return 0;
}
大侠~看看我这个程序,阈值操作是不是不正确啊?操作之后的图片不是我想要的效果···颜色不对啊[Quote=引用 1 楼 的回复:]

扫描 整个图片的像素, 设定 红色, 黑色, 白色阈值。。。 如果像素值在这个阈值内,就认为是 什么颜色,, 浅点,灰色点 无所谓, 然后将该像素点 直接改成 全红, 全黑, 或者全白色。。。
[/Quote]
xuxinqiujiao123 2012-09-11
  • 打赏
  • 举报
回复
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int main( )
{
//彩色3通道
Mat src(3,4,CV_8UC3);
//用来存储目的图片的矩阵
Mat res(3,4,CV_8UC3);
src = imread("1.jpg", 1 );
Mat r,g,b;
//多通道分成3个单通道
split(&src,&b,&g,&r);//在OpenCV中,一张3通道图像的一个像素点是按BGR的顺序存储的。
/*红:255,0,0(rgb)
0,240,120(hsv)
黑:0,0,0(RGB)
   160,0,0
白:255,255,255
  160,0,240*/
for(int i=0;i<b.rows;i++)
for(int j=0;j<b.cols;j++)
{
if(b.at<uchar>(i,j)<128)
b.at<uchar>(i,j)=0;
else
b.at<uchar>(i,j)=255;
}
for(int i=0;i<g.rows;i++)
for(int j=0;j<g.cols;j++)
{
if(g.at<uchar>(i,j)<128)
g.at<uchar>(i,j)=0;
else
g.at<uchar>(i,j)=255;
}
for(int i=0;i<r.rows;i++)
for(int j=0;j<r.cols;j++)
{
if(r.at<uchar>(i,j)<128)
r.at<uchar>(i,j)=0;
else
r.at<uchar>(i,j)=255;
}
src.reshape(36,0);


// 创建窗口显示图片
namedWindow( "src" );
namedWindow("result");
imwrite("jiashen.jpg",res);
imshow("src",src);
imshow("result",res);
waitKey();
return 0;
}
报错:
1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>正在编译...
1>图片.cpp
1>d:\backup\我的文档\visual studio 2008\projects\test\test\图片.cpp(15) : error C2661: “cv::split”: 没有重载函数接受 4 个参数
1>生成日志保存在“file://d:\Backup\我的文档\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm”
1>test - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

[Quote=引用 2 楼 的回复:]

楼上的方法可以的,直接操作图像矩阵就可以了。。
这个我以前做过一个类似的,就是讲其中一种颜色加深,关键是设定阈值。
楼主贴下代码,帮你修改一下。。
[/Quote]
xuxinqiujiao123 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
有一幅图片是一份文件,我想让红色的文字更红,黑色的文字更黑,白色背景更白,请问应该怎么做呢?
我的OpenCV版本是2.1的,用的C++语言
[/Quote]
兄台,能写个代码不?之前都是二值化,黑白图,三个颜色就不懂了···
hackbuteer1 2012-09-10
  • 打赏
  • 举报
回复
楼上的方法可以的,直接操作图像矩阵就可以了。。
这个我以前做过一个类似的,就是讲其中一种颜色加深,关键是设定阈值。
楼主贴下代码,帮你修改一下。。
xmu_才盛 2012-09-09
  • 打赏
  • 举报
回复
扫描 整个图片的像素, 设定 红色, 黑色, 白色阈值。。。 如果像素值在这个阈值内,就认为是 什么颜色,, 浅点,灰色点 无所谓, 然后将该像素点 直接改成 全红, 全黑, 或者全白色。。。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧