我正在使用C++和OpenCV制作一个函数,它将检测图像中像素的颜色,确定它在什么颜色范围内,并用通用颜色替换它。例如,绿色可以从深绿色到浅绿色,程序将确定它仍然是绿色,并将其替换为简单的绿色,使输出图像看起来非常简单。所有的东西都被设置好了,但是我很难定义每个范围的特性,我很好奇是否有人知道或者有一个公式,给定BGR值,可以确定像素的整体颜色。如果不是,我就得做很多实验,自己做,但如果有东西已经存在,那会节省时间。我做了大量的研究,到目前为止还没有发现任何东西。
如果你想让你的图像更简单(即用更少的颜色),但好看,你有几个选择:
>
一个简单的方法是将图像除以(整数除法)因子n
,然后乘以因子n
。
或者,您可以使用某些聚类算法(如这里所示的kmeans
或中值切割算法)将图像划分为k
颜色。
原始图像:
减少的颜色(量化,n=64
):
减少的颜色(群集,k=8
):
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat3b img = imread("path_to_image");
imshow("Original", img);
uchar N = 64;
img /= N;
img *= N;
imshow("Reduced", img);
waitKey();
return 0;
}
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat3b img = imread("path_to_image");
imshow("Original", img);
// Cluster
int K = 8;
int n = img.rows * img.cols;
Mat data = img.reshape(1, n);
data.convertTo(data, CV_32F);
vector<int> labels;
Mat1f colors;
kmeans(data, K, labels, cv::TermCriteria(), 1, cv::KMEANS_PP_CENTERS, colors);
for (int i = 0; i < n; ++i)
{
data.at<float>(i, 0) = colors(labels[i], 0);
data.at<float>(i, 1) = colors(labels[i], 1);
data.at<float>(i, 2) = colors(labels[i], 2);
}
Mat reduced = data.reshape(3, img.rows);
reduced.convertTo(reduced, CV_8U);
imshow("Reduced", reduced);
waitKey();
return 0;
}
我在找一个算法(或者其他什么方法)来确定一个给定的加权图在O(ElogV)中是否有唯一的MST(最小生成树)? 我对体重一无所知(如体重(e1)!= weight(e2)),如果该图只有一个唯一的MST,则算法返回True,否则返回False。 我首先使用 Kruskal 的算法,并检查 find-set(u)==find-set(v) 是否因此在 MST 中有一个圆圈,但这种方式并没有涵盖我认为
问题内容: 我在Python中使用matplotlib在一个数组中,其浮点数介于0到1之间。 我正在用imshow显示此数组,我试图创建一个与Greens相同的自定义cmap,但是当一个单元格变为0时,我希望能够将该值映射为红色,而其余光谱不变。 如果有人更熟悉matplotlib能够帮助我,我将不胜感激! 例如,我将如何编辑此脚本,以使矩阵中的零值显示为红色? 问题答案: matplotlib中
问题内容: 雇员表具有ID和NAME列。名称可以重复。我想找出是否至少有一个名称类似“ kaushik%”的行。 因此查询应返回true / false或1/0。 是否可以使用单个查询找到它。如果我们尝试类似 在这种情况下,它不会返回true / false。另外,我们正在遍历表中的所有记录。简单SQL中是否存在这样的方式,使得每当获取满足条件的第一条记录时,它都应停止检查其他记录。还是只能在Pl
通常,投影矩阵P的定义是将点从世界坐标投影到图像/像素坐标的3x4矩阵。投影矩阵可分为: K:具有本征参数的3x4摄像机矩阵K T:具有外参数的4x4变换矩阵 null
汤姆教他的学生求一个数的阶乘。他想测试学生的理解力。为此,他提供了一个数字。他希望学生们告诉他这个数是哪个数的阶乘。 示例:如果Tom提供的数字为120,学生应该回答为5,因为5!=120。 通过编写一个程序来帮助学生做到这一点。请注意,输入应该是一个大于零的数字。如果输入小于或等于零,则输出应该是“无效输入”。此外,如果提供的输入不完全是一个数字的阶乘,例如,提供的输入是122,这不是一个数字的
我正在寻找以下问题的答案。 给定一组整数(无重复项)和一个和,找出集合元素的所有可能组合,并求和。解的顺序并不重要(解{2,2,3}和{3,2,2}是相等的)。 请注意,最终组合不需要是集合,因为它可以包含重复。 示例:集合{2,3,5}和10 结果:{2, 2, 2, 2, 2},{2,2,3,3},{2,3,5},{5,5} 我已经研究过子集和问题以及硬币兑换问题,但不能使它们适应我的需要。我