鱼C论坛

 找回密码
 立即注册
查看: 1361|回复: 11

图片如何实现分CMYK四色以及多色等功能

[复制链接]
发表于 2024-10-21 08:56:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问怎样将CMYK四色或者带专色的印刷色图片通过Opencv导入成Mat图像进行分离通道,并将分离后的通道图做半色调网点处理(即Photoshop里面的Halftone Screen),并设置Halftone网点的角度以及每英寸网点的数量,然后将这些分色图合并通道保存为CMYK或者多色TIF图像文件。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-10-21 09:02:26 | 显示全部楼层
FishC 发表于 2024-10-21 08:56
要使用OpenCV将CMYK彩图导入、分离通道并进行半色调处理,以下是逐步操作指南:

### 1. 导入和转换CMYK ...

不好意思,我忘了说我是用C++ 写代了
请问怎样将CMYK四色或者带专色的印刷色图片通过Opencv导入成Mat图像进行分离通道,并将分离后的通道图做半色调网点处理(即Photoshop里面的Halftone Screen),并设置Halftone网点的角度以及每英寸网点的数量,然后将这些分色图合并通道保存为CMYK或者多色TIF图像文件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-21 11:02:36 | 显示全部楼层
本帖最后由 cxnet 于 2024-10-21 11:09 编辑
FishC 发表于 2024-10-21 09:02
好的,下面是使用C++和OpenCV库来实现这一任务的详细步骤,包括导入CMYK图片、分离通道、半色调处理以 ...


我尝试了你的代码,确实可以生成网点,但我发现一些问题
第一,比如颜色是100%的填充色时不应该是网点,而是纯色一块,比如K100,C100,Y100,M100这样的颜色不应该有网点。
第二,网点边缘会扩展开侵蚀白色区域,这样就会让文字或者线条边缘表现不光滑。
第三,挂网后要让图片变成黑白二值图后再合并通道,否则有些白色边缘就会有灰色
第四,网点的角度没有效果(相邻四个网点的组合形状角度),全部的角度都是90度,随便修改角度都没有变化
第五,我需要纯圆形的网点,目前的网点不是纯圆的,比如50%的填色的地方就变成了方形网点了
第六,
请问以上问题应该解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-21 12:21:50 | 显示全部楼层
FishC 发表于 2024-10-21 11:09
要解决这些问题,我们可以调整算法:

### 解决方案

还存在以下问题
第一,网点还是会侵蚀白色区域,当网点频率数值越小,网点就比较大,这样白色的文字和比较线的线条就基本上被侵蚀完了,当网点频率数值越大时,比如36时白色区域就会侵蚀小一些,因为网点已经很小了,我想达到不管网点频率的数值是大还是小都不要侵蚀白色区域,这样图形的边缘才是光滑的,也就是相当于消除边缘的锯齿。
第二,渐变色过渡太硬了,颜色渐的地方突然网点就变没有了,这就是网点需要根据颜色填色数据逐步增加从而逐步增加网点的大小,这样才能不会在渐变过渡颜色的地方出现带状效果。
第三,还是没办法设置网点角度,也就是相邻的四个网点组合在一起的角度成45度、90度、75度、15度
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-21 13:40:13 | 显示全部楼层
FishC 发表于 2024-10-21 12:35
要解决这些问题,需要采用更复杂和精细的半色调算法。为了不侵蚀白色区域,平滑渐变,并且支持不同角度 ...

出现了几条错误,请问这个怎么解决?
LNK2019        无法解析的外部符号 "public: __cdecl cv::Vec<double,4>::Vec<double,4>(void)" (??0?$Vec@N$03@cv@@QEAA@XZ),函数 "public: __cdecl cv::Scalar_<double>::Scalar_<double>(double)" (??0?$Scalar_@N@cv@@QEAA@N@Z) 中引用了该符号

LNK2019        无法解析的外部符号 "public: double & __cdecl cv::Vec<double,4>::operator[](int)" (??A?$Vec@N$03@cv@@QEAAAEANH@Z),函数 "class cv::Mat __cdecl halftoneChannel(class cv::Mat const &,double,double)" (?halftoneChannel@@YA?AVMat@cv@@AEBV12@NN@Z) 中引用了该符号

LNK2019        无法解析的外部符号 "public: __cdecl cv::Mat::Mat<double,2,3>(class cv::Matx<double,2,3> const &,bool)" (??$?0N$01$02@Mat@cv@@QEAA@AEBV?$Matx@N$01$02@1@_N@Z),函数 "class cv::Mat __cdecl cv::getRotationMatrix2D(class cv::Point_<float>,double,double)" (?getRotationMatrix2D@cv@@YA?AVMat@1@V?$Point_@M@1@NN@Z) 中引用了该符号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-21 13:49:32 | 显示全部楼层
FishC 发表于 2024-10-21 13:40
这些错误通常是由于链接器未能找到某些OpenCV库文件所致。这可能是因为在项目设置中没有正确包含所需的 ...

opencv库我已经安装好且配置好的情况下出的错误,因为在霍夫变换生成半色调角度网点模板函数内就出现了错误,是否是vector和cmath需要配置?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-27 03:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表