You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
python/GESP/灰阶图像/灰阶图像 - 第一个版本.cpp

92 lines
2.2 KiB

1 year ago
#include <bits/stdc++.h>
using namespace std;
const int N = 256;
//Ͱ
int bucket[N];//0 ~ 255
//ԭʼ<D4AD><CABC><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string q[30];
//<2F><>һ<EFBFBD><D2BB>16<31><36><EFBFBD>ƵĻҽ<C4BB>תΪһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>ֵ
int get(char a, char b) {
return (a - '0') * 16 + (b - '0');
}
//<2F><>һ<EFBFBD><D2BB>ʮ<EFBFBD><CAAE><EFBFBD>ƵĻҽ<C4BB>ֵ[0,255]ת<><D7AA><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[0,FF]
string toHex(int x) {
string res;
int a = x % 16; // 0 ~ 15
int b = x / 16; //
if (a >= 10)
res = 'A' + a - 10;
else
res = '0' + a;
if (b >= 10)
res = res + 'A' + b - 10;
else
res = res + '0' + b;
}
//<2F><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD>еĻҽװ<D2BD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
struct Node {
int id;//<2F><><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
int cnt;//<2F><><EFBFBD><EFBFBD>
const bool operator<(const Node &b) const {
if (cnt == b.cnt)
return id < b.id;
return cnt > b.cnt;
}
};
vector<Node> vec;//<2F><>Ҫ<EFBFBD><D2AA>bucket<65><74>װ<EFBFBD><D7B0>Node<64>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ýṹ<C3BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int main() {
int n;
cin >> n;//<2F><>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
for (int i = 1; i <= n; i++) {
string s;
q[i] = s;//<2F><><EFBFBD><EFBFBD>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cin >> s;
for (int j = 0; j < s.size(); j += 2) {
char a = s[j], b = s[j + 1];
//<2F><><EFBFBD><EFBFBD>a='A' b='B' AB
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> AB<41><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>Ǹ<EFBFBD>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ʲô<CAB2><C3B4><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD>һ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB> AB FF
int k = get(a, b); //<2F>ҽ׶<D2BD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
bucket[k]++;
}
}
//<2F>ҳ<EFBFBD>ǰ16λʹ<CEBB><CAB9>Ƶ<EFBFBD>ʸߵĻҽ<C4BB>
//<2F><><EFBFBD>򣬰<EFBFBD>ʲô<CAB2><C3B4><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
//1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ
//2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ǰ
for (int i = 0; i <= 255; i++) {
vec.push_back({i, bucket[i]});
}
sort(vec.begin(), vec.end());
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ѿ<EFBFBD><D1BE>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>vector<Node>
//vec[0]~vec[15]; vec[0].id vec[0].cnt
//toHex(vec[0].id)
// AA BB CC DD
for (int i = 1; i <= n; i++) { //ö<><C3B6>ÿ<EFBFBD><C3BF>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ÿ2<C3BF><32>һ<EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD>
for (int j = 0; j < q[0].size(); j += 2) {
char a = q[j], b = q[j + 1]; //0 F ,0 F
//<2F><><EFBFBD><EFBFBD>ab<61><62>װ<EFBFBD><D7B0><EFBFBD>Ķ̴<C4B6><CCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>vec<65>е<EFBFBD>ǰ16<31><36><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int x = get(a, b);
int mi = INT_MAX;
int mi_p = 0;
for (int k = 0; k < min(16, vec.size()); k++) { //16<31><36><EFBFBD>з<EFBFBD><D0B7>յģ<D5B5><C4A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>û<EFBFBD><C3BB>16<31><36><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>
if (mi > abs(vec[k] - x)) {
mi = abs(vec[k] - x);
mi_p = k;
}
}
//mi_p [0,255] -> ʮ<><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>a,b<><62><EFBFBD><EFBFBD>ֵ<EFBFBD>޸<EFBFBD>Ϊmi_p<5F><70><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD>ֵ
cout << toHex(mi_p);
}
}
return 0;
}