- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写代码来转换 RGB 格式的图像
RGB RGB RGBRGB RGB RGBRGB RGB RGBRGB RGB RGB
试图转换为灰度 img,但它不起作用。我得到一张没有着色的照片,但不像预期的那样。更像是黑白而不是灰色。
struct Img {
unsigned long sizeX;
unsigned long sizeY;
char *data;
};
void convernt(Img *image)
{
int x,y,i, iRow;
char* p = image->data;
int width=image->sizeX;
int height=image->sizeY;
int rowSize = width*3; // number of bytes in one row
int iPix;
for ( y = 0; y < height; ++y)
{
iRow = y*rowSize ; // index of first pixel in row y
for ( x = 0; x < rowSize; x+=3)
{
iPix = iRow + x*3; // index of pixel
double con=0.2989*p[iPix]+ 0.5870*p[iPix+1]+0.1140*p[iPix+2];
p[iPix] = con;
p[iPix+1] = con;
p[iPix+2] = con;
}
}
}
我希望代码与这个相同但更短应该做完全一样的我想我错过了什么
#define NUM_OF_COLORS 256
// perform histogram equalization algorithm on an image
void convert(Img *image)
{
int i,j;
double* orgHist = (double*)malloc(NUM_OF_COLORS*sizeof(double));
unsigned char* conversionVector = (unsigned char*)malloc(NUM_OF_COLORS);
//clear the vector
for (i=0; i<NUM_OF_COLORS; i++) {
orgHist[i] = 0;
}
//get the histogram of the image
for (j=0; j<image->sizeY; j++) {
for (i=0; i<image->sizeX; i++) {
orgHist[(unsigned char)image->data[3*i + 3*j*image->sizeX + 1]]++;
}
}
//calculate the accumulated histogram of the image
for (i=1; i<NUM_OF_COLORS; i++) {
orgHist[i] = orgHist[i] + orgHist[i-1];
}
//normalize the histogram
for (i=0; i<NUM_OF_COLORS; i++) {
orgHist[i] = orgHist[i]/(image->sizeX*image->sizeY);
conversionVector[i] = 0;
}
// preform the histogram equalization algorithm
i = 0;
j = 0;
while (i<NUM_OF_COLORS) {
if ((((double)j+1)/256) < orgHist[i]) {
j++;
} else {
conversionVector[i] = j;
i++;
}
}
// apply the conversion vector on the image
for (i=0; i<image->sizeX; i++) {
for (j=0; j<image->sizeY; j++) {
image->data[3*i + 3*j*image->sizeX + 1] =
conversionVector[(unsigned char)image->data[3*i + 3*j*image->sizeX + 1]];
}
}
// copy G values to R&B
for (i = 0; i < image->sizeX*image->sizeY; i++) {
image->data[3*i] = image->data[3*i+1];
image->data[3*i+2]= image->data[3*i+1];
}
free(orgHist);
free(conversionVector);
}
最佳答案
要么在 for
循环中将 x
递增 3
,要么将 x*3
添加到指数。但是不要两者都。:
for ( x = 0; x < rowSize; x+=3)
// ^^^ either x++ ...
{
iPix = iRow + x*3; // index of pixel
// ^^ ... or iRow + x;
...
}
因为 rowSize
是字节数而不是像素数,所以调整您的代码如下:
for ( x = 0; x < rowSize; x+=3 )
{
iPix = iRow + x; // index of pixel
double con = 0.2989*p[iPix] + 0.5870*p[iPix+1] + 0.1140*p[iPix+2];
p[iPix] = (char)con;
p[iPix+1] = (char)con;
p[iPix+2] = (char)con;
}
这里是大图像的解决方案:
#define NUM_OF_COLORS 256
unsigned char rTable[NUM_OF_COLORS];
unsigned char gTable[NUM_OF_COLORS];
unsigned char bTable[NUM_OF_COLORS];
void initTables()
{
for ( int c = 0; c < NUM_OF_COLORS; c ++ )
{
rTable[c] = (unsigned char)(0.2989*c);
gTable[c] = (unsigned char)(0.5870*c);
bTable[c] = (unsigned char)(0.1140*c);
}
}
void convernt(struct Img *image)
{
unsigned char* p = (unsigned char*)image->data;
int width=image->sizeX;
int height=image->sizeY;
int rowSize = width*3; // number of bytes in one row
for ( int y = 0; y < height; ++y)
{
int iRow = y*rowSize ; // index of first pixel in row y
for ( int x = 0; x < rowSize; x+=3 )
{
int iPix = iRow + x; // index of pixel
unsigned char col = rTable[p[iPix]] + gTable[p[iPix+1]] + bTable[p[iPix+2]];
p[iPix] = col;
p[iPix+1] = col;
p[iPix+2] = col;
}
}
}
关于c - 从reg-green-blue图像到c中的灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34679039/
在我输入的 javascript 控制台中/(red|green)/g.exec('红绿红绿') 它返回一个包含两个结果的数组:[“红色”,“红色”] 它不应该返回一个包含 4 个结果的数组吗?如:[
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
我必须在 green dao 中为许多 id 存储类似的数据。所以我决定将所有 id 连接成一个字符串,然后作为一行存储在 green dao 中。因为我可以使用类似的查询提取数据。 由于ID字符串会
试图找到一种解决方案来识别特定屏幕截图上是否存在“绿色”颜色(下图)。 问题是,当使用纯 RGB 位图时,它无法像我希望的那样工作,因为图像是从网页的屏幕截图中截取的并且有点模糊,所以很多像素看起来不
我试图用 green dao 编写一个查询,但不知道如何准确地说出我想说的话,我有 3 个属性,我将查询集中在 CardIconType、Type_of_word 和 Type_of_type (糟糕
Python中有没有“绿色”库用于读取图像并获取RGB值? 我想获取 jpeg 图像的像素,但我没有权利在每台计算机上安装 PIL 模块,所以我想知道是否有其他替代方法可以做到这一点? 最佳答案 可以
这是我的代码: Schema schema = new Schema(1, "com.core.greendao.db"); /* Topic Model Table */ Enti
我正在编写代码来转换 RGB 格式的图像 RGB RGB RGBRGB RGB RGBRGB RGB RGBRGB RGB RGB 试图转换为灰度 img,但它不起作用。我得到一张没有着色的照片,但不
这个问题在这里已经有了答案: GreenHills - small data area overflow (3 个答案) 关闭 8 年前。 我正在尝试编译嵌入式 C 代码,但是发生了小数据区溢出。我
我正在开展一个项目,该项目应使用从 iPhone 摄像头拍摄的视频或照片来检测人行横道上的“绿人”或“红人”是否亮起。 到目前为止,我已经尝试过图像 mask 、轮廓和特征检测。 我编写的最后一个程序
我正在改变我的苹果的颜色,如下所示: 将所有红色变为绿色,将所有黄色变为橙色。我的问题是如何选择所有种类的红色以及如何选择所有种类的黄色以应用新的效果或颜色。 请帮忙。 谢谢 最佳答案 最简单的方法是
我使用以下设置来使用超时插件通过 py.test 运行测试: venv/bin/py.test-3.4 --timeout=200 --durations=10 cryptoassets (来自 h
我想将颜色元组转换为颜色名称,例如“黄色”或“蓝色” >>> im = Image.open("test.jpg") >>> n, color = max(im.getcolors(im.size[0
我正在尝试拍摄单张图像并添加音频,从而生成带有该单张图像的视频播放整首歌曲;就像您在 YouTube 视频中看到的歌曲一样。我使用的命令来自此链接:https://askubuntu.com/ques
我在Green Thread (Wikipedia)上阅读了此信息页,我想知道:还有其他编程系统依赖Erlang之外的“绿色进程”吗? 编辑:“绿色线程!= 绿色进程” 基于绿色流程 Erlang h
我将数据存入 json arraylist,当我尝试使用 green dao 将数据存储到数据库时出错。我无法识别出了什么问题 我的 Activity 类(class)如下 package com.e
我在 greendao 中进行多笔交易时遇到一些问题例如,我已经有两个包含 name book 和 type_book 的表。 我已经有这样的代码: SQLiteDatabase db = b
我不知道为什么我不能在SpriteKit中使用它。如果我尝试UIColor(red:156,green:187,blue:214),颜色变成白色。它不是应该的颜色,我不知道为什么它不起作用。 最佳答案
抱歉,我是 Greenhill's 的新用户。我正在使用 MULTI 6.1.6,我选择的语言是 C++。 我在尝试使用模拟器使用 new 启动大小大于 1M 的类的对象时遇到问题。 Class_Bi
我目前正在使用 iOS 11 api 开发一个简单的拖放应用程序:UIDragInteractionDelegate 和 UIDropInteractionDelegate 我成功地将拖放功能仅锁定到
我是一名优秀的程序员,十分优秀!