Попробуйте
<?php
$to = "somebody@example.com, somebodyelse@example.com";
$subject = "HTML email";
$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<p>This email contains HTML Tags!</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
</table>
</body>
</html>";
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
// More headers
$headers .= 'From: <webmaster@example.com>' . "\r\n";
$headers .= 'Cc: myboss@example.com' . "\r\n";
mail($to,$subject,$message,$headers);
?>
Преобразуйте цветовые модели ORANGE_MIN
, ORANGE_MAX
и color
в HSL (HSV) и убедитесь, что оттенок находится в пределах требуемого диапазона. См., Например, http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/ для математики.
UPDATE
Насыщенность и легкость также следует проверять на некоторых диапазонах, см. комментарии ниже. Спасибо MSalters за указание этого.
Я пойду несколько иначе. Вместо определения интервалов диапазона для всех предопределенных цветов вы можете:
В этом маленьком образце я использовал цветовое пространство BGR, так как хорошо ведется эвклидовое расстояние (norm
двух цветов).
Вы можете использовать другое цветовое пространство, например, HSV, но вам нужно найти подходящее расстояние. Вы не можете использовать только значение H, поскольку вы будете пропускать черные / белые / серые цвета (как указано в @MSalters).
Итак, например, ваш цвет почти оранжевый 20, 130, 250
, с соответствующей палитрой вы получите что-то вроде:
[20, 130, 250] is similar to orange
Distance with nearest color [0, 127, 255] is 20.8327
Код:
#include <opencv2/opencv.hpp>
#include <vector>
#include <map>
#include <string>
using namespace cv;
using namespace std;
// Needed to put Vec3b into a std::map
struct lessVec3b
{
bool operator()(const Vec3b& lhs, const Vec3b& rhs) {
return (lhs[0] != rhs[0]) ? (lhs[0] < rhs[0]) : ((lhs[1] != rhs[1]) ? (lhs[1] < rhs[1]) : (lhs[2] < rhs[2]));
}
};
int main()
{
// Define a set of predefined BGR colors
map<Vec3b, string, lessVec3b> palette;
palette[Vec3b(0, 0, 0)] = "black";
palette[Vec3b(0, 0, 255)] = "red";
palette[Vec3b(0, 255, 0)] = "green";
palette[Vec3b(255, 0, 0)] = "blue";
palette[Vec3b(0, 127, 255)] = "orange";
// Your color
Vec3b my_color(20, 130, 250); // almost orange
// Look for nearest color in palette
Vec3b nearest_color;
string color_name;
float min_distance = FLT_MAX;
for (const auto& pal : palette)
{
float dist = norm(pal.first, my_color);
if (dist < min_distance)
{
nearest_color = pal.first;
color_name = pal.second;
min_distance = dist;
}
}
// Define a distance. This will behave like your ranges
float th_distance = 1000.f;
if (min_distance < th_distance)
{
cout << my_color << " is similar to " << color_name << endl;
}
else
{
cout << my_color << " is not in the palette" << endl;
}
cout << "Distance with nearest color " << nearest_color << " is " << min_distance << endl;
return 0;
}