CIAreaHistogram 给我的除了最后一个元素之外全是 0?

2023-12-11

我想计算 NSImage 的直方图,所以我转向CIFilter自然。有一个名为的过滤器CIAreaHistogram做我想做的事。这是我的代码:

NSBitmapImageRep *rep = [image bitmapImageRepresentation];
CIImage* hImage = nil;
@autoreleasepool {
    CIImage *input = [[CIImage alloc] initWithBitmapImageRep:rep];
    CIFilter *histogramFilter = [CIFilter filterWithName:@"CIAreaHistogram"];
    [histogramFilter setDefaults];
    [histogramFilter setValue:input forKey:kCIInputImageKey];
    [histogramFilter setValue:[CIVector vectorWithCGRect:[input extent]] forKeyPath:@"inputExtent"];
    [histogramFilter setValue:[NSNumber numberWithInt:256] forKeyPath:@"inputCount"];
    [histogramFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputScale"];

    hImage = [histogramFilter valueForKey:kCIOutputImageKey];
    input = nil;

    NSImage *result = nil;
    @autoreleasepool
    {
        NSCIImageRep *rep = [NSCIImageRep imageRepWithCIImage:hImage];
        result = [[NSImage alloc] initWithSize:rep.size];
        [result addRepresentation:rep];
    }

    NSBitmapImageRep *imgRep = [result bitmapImageRepresentation];
    for (int y = 0; y < imgRep.size.height; y ++) {
        for (int x = 0; x < imgRep.size.width; x ++) {
            NSUInteger pixel[4];
            [imgRep getPixel:pixel atX:x y:y];
            NSLog(@"(%d, %d): %lu - %lu - %lu - %lu", x, y, pixel[0], pixel[1], pixel[2], pixel[3]);
        }
    }
}

The bitmapImageRepresentation只是一个转换的帮助方法NSImage to NSBitmapImageRep。我已经测试并使用了很多它,看起来很酷。

输出如下:

(0, 0): 0 - 0 - 0 - 0
(1, 0): 0 - 0 - 0 - 0
(2, 0): 0 - 0 - 0 - 0
(3, 0): 0 - 0 - 0 - 0
(4, 0): 0 - 0 - 0 - 0
(5, 0): 0 - 0 - 0 - 0
(6, 0): 0 - 0 - 0 - 0
(7, 0): 0 - 0 - 0 - 0
(8, 0): 0 - 0 - 0 - 0
(9, 0): 0 - 0 - 0 - 0
(10, 0): 0 - 0 - 0 - 0
(11, 0): 0 - 0 - 0 - 0
(12, 0): 0 - 0 - 0 - 0
(13, 0): 0 - 0 - 0 - 0
(14, 0): 0 - 0 - 0 - 0
(15, 0): 0 - 0 - 0 - 0
(16, 0): 0 - 0 - 0 - 0
(17, 0): 0 - 0 - 0 - 0
(18, 0): 0 - 0 - 0 - 0
(19, 0): 0 - 0 - 0 - 0
(20, 0): 0 - 0 - 0 - 0
(21, 0): 0 - 0 - 0 - 0
(22, 0): 0 - 0 - 0 - 0
(23, 0): 0 - 0 - 0 - 0
(24, 0): 0 - 0 - 0 - 0
(25, 0): 0 - 0 - 0 - 0
(26, 0): 0 - 0 - 0 - 0
(27, 0): 0 - 0 - 0 - 0
(28, 0): 0 - 0 - 0 - 0
(29, 0): 0 - 0 - 0 - 0
(30, 0): 0 - 0 - 0 - 0
(31, 0): 0 - 0 - 0 - 0
(32, 0): 0 - 0 - 0 - 0
(33, 0): 0 - 0 - 0 - 0
(34, 0): 0 - 0 - 0 - 0
(35, 0): 0 - 0 - 0 - 0
(36, 0): 0 - 0 - 0 - 0
(37, 0): 0 - 0 - 0 - 0
(38, 0): 0 - 0 - 0 - 0
(39, 0): 0 - 0 - 0 - 0
(40, 0): 0 - 0 - 0 - 0
(41, 0): 0 - 0 - 0 - 0
(42, 0): 0 - 0 - 0 - 0
(43, 0): 0 - 0 - 0 - 0
(44, 0): 0 - 0 - 0 - 0
(45, 0): 0 - 0 - 0 - 0
(46, 0): 0 - 0 - 0 - 0
(47, 0): 0 - 0 - 0 - 0
(48, 0): 0 - 0 - 0 - 0
(49, 0): 0 - 0 - 0 - 0
(50, 0): 0 - 0 - 0 - 0
(51, 0): 0 - 0 - 0 - 0
(52, 0): 0 - 0 - 0 - 0
(53, 0): 0 - 0 - 0 - 0
(54, 0): 0 - 0 - 0 - 0
(55, 0): 0 - 0 - 0 - 0
(56, 0): 0 - 0 - 0 - 0
(57, 0): 0 - 0 - 0 - 0
(58, 0): 0 - 0 - 0 - 0
(59, 0): 0 - 0 - 0 - 0
(60, 0): 0 - 0 - 0 - 0
(61, 0): 0 - 0 - 0 - 0
(62, 0): 0 - 0 - 0 - 0
(63, 0): 0 - 0 - 0 - 0
(64, 0): 0 - 0 - 0 - 0
(65, 0): 0 - 0 - 0 - 0
(66, 0): 0 - 0 - 0 - 0
(67, 0): 0 - 0 - 0 - 0
(68, 0): 0 - 0 - 0 - 0
(69, 0): 0 - 0 - 0 - 0
(70, 0): 0 - 0 - 0 - 0
(71, 0): 0 - 0 - 0 - 0
(72, 0): 0 - 0 - 0 - 0
(73, 0): 0 - 0 - 0 - 0
(74, 0): 0 - 0 - 0 - 0
(75, 0): 0 - 0 - 0 - 0
(76, 0): 0 - 0 - 0 - 0
(77, 0): 0 - 0 - 0 - 0
(78, 0): 0 - 0 - 0 - 0
(79, 0): 0 - 0 - 0 - 0
(80, 0): 0 - 0 - 0 - 0
(81, 0): 0 - 0 - 0 - 0
(82, 0): 0 - 0 - 0 - 0
(83, 0): 0 - 0 - 0 - 0
(84, 0): 0 - 0 - 0 - 0
(85, 0): 0 - 0 - 0 - 0
(86, 0): 0 - 0 - 0 - 0
(87, 0): 0 - 0 - 0 - 0
(88, 0): 0 - 0 - 0 - 0
(89, 0): 0 - 0 - 0 - 0
(90, 0): 0 - 0 - 0 - 0
(91, 0): 0 - 0 - 0 - 0
(92, 0): 0 - 0 - 0 - 0
(93, 0): 0 - 0 - 0 - 0
(94, 0): 0 - 0 - 0 - 0
(95, 0): 0 - 0 - 0 - 0
(96, 0): 0 - 0 - 0 - 0
(97, 0): 0 - 0 - 0 - 0
(98, 0): 0 - 0 - 0 - 0
(99, 0): 0 - 0 - 0 - 0
(100, 0): 0 - 0 - 0 - 0
(101, 0): 0 - 0 - 0 - 0
(102, 0): 0 - 0 - 0 - 0
(103, 0): 0 - 0 - 0 - 0
(104, 0): 0 - 0 - 0 - 0
(105, 0): 0 - 0 - 0 - 0
(106, 0): 0 - 0 - 0 - 0
(107, 0): 0 - 0 - 0 - 0
(108, 0): 0 - 0 - 0 - 0
(109, 0): 0 - 0 - 0 - 0
(110, 0): 0 - 0 - 0 - 0
(111, 0): 0 - 0 - 0 - 0
(112, 0): 0 - 0 - 0 - 0
(113, 0): 0 - 0 - 0 - 0
(114, 0): 0 - 0 - 0 - 0
(115, 0): 0 - 0 - 0 - 0
(116, 0): 0 - 0 - 0 - 0
(117, 0): 0 - 0 - 0 - 0
(118, 0): 0 - 0 - 0 - 0
(119, 0): 0 - 0 - 0 - 0
(120, 0): 0 - 0 - 0 - 0
(121, 0): 0 - 0 - 0 - 0
(122, 0): 0 - 0 - 0 - 0
(123, 0): 0 - 0 - 0 - 0
(124, 0): 0 - 0 - 0 - 0
(125, 0): 0 - 0 - 0 - 0
(126, 0): 0 - 0 - 0 - 0
(127, 0): 0 - 0 - 0 - 0
(128, 0): 0 - 0 - 0 - 0
(129, 0): 0 - 0 - 0 - 0
(130, 0): 0 - 0 - 0 - 0
(131, 0): 0 - 0 - 0 - 0
(132, 0): 0 - 0 - 0 - 0
(133, 0): 0 - 0 - 0 - 0
(134, 0): 0 - 0 - 0 - 0
(135, 0): 0 - 0 - 0 - 0
(136, 0): 0 - 0 - 0 - 0
(137, 0): 0 - 0 - 0 - 0
(138, 0): 0 - 0 - 0 - 0
(139, 0): 0 - 0 - 0 - 0
(140, 0): 0 - 0 - 0 - 0
(141, 0): 0 - 0 - 0 - 0
(142, 0): 0 - 0 - 0 - 0
(143, 0): 0 - 0 - 0 - 0
(144, 0): 0 - 0 - 0 - 0
(145, 0): 0 - 0 - 0 - 0
(146, 0): 0 - 0 - 0 - 0
(147, 0): 0 - 0 - 0 - 0
(148, 0): 0 - 0 - 0 - 0
(149, 0): 0 - 0 - 0 - 0
(150, 0): 0 - 0 - 0 - 0
(151, 0): 0 - 0 - 0 - 0
(152, 0): 0 - 0 - 0 - 0
(153, 0): 0 - 0 - 0 - 0
(154, 0): 0 - 0 - 0 - 0
(155, 0): 0 - 0 - 0 - 0
(156, 0): 0 - 0 - 0 - 0
(157, 0): 0 - 0 - 0 - 0
(158, 0): 0 - 0 - 0 - 0
(159, 0): 0 - 0 - 0 - 0
(160, 0): 0 - 0 - 0 - 0
(161, 0): 0 - 0 - 0 - 0
(162, 0): 0 - 0 - 0 - 0
(163, 0): 0 - 0 - 0 - 0
(164, 0): 0 - 0 - 0 - 0
(165, 0): 0 - 0 - 0 - 0
(166, 0): 0 - 0 - 0 - 0
(167, 0): 0 - 0 - 0 - 0
(168, 0): 0 - 0 - 0 - 0
(169, 0): 0 - 0 - 0 - 0
(170, 0): 0 - 0 - 0 - 0
(171, 0): 0 - 0 - 0 - 0
(172, 0): 0 - 0 - 0 - 0
(173, 0): 0 - 0 - 0 - 0
(174, 0): 0 - 0 - 0 - 0
(175, 0): 0 - 0 - 0 - 0
(176, 0): 0 - 0 - 0 - 0
(177, 0): 0 - 0 - 0 - 0
(178, 0): 0 - 0 - 0 - 0
(179, 0): 0 - 0 - 0 - 0
(180, 0): 0 - 0 - 0 - 0
(181, 0): 0 - 0 - 0 - 0
(182, 0): 0 - 0 - 0 - 0
(183, 0): 0 - 0 - 0 - 0
(184, 0): 0 - 0 - 0 - 0
(185, 0): 0 - 0 - 0 - 0
(186, 0): 0 - 0 - 0 - 0
(187, 0): 0 - 0 - 0 - 0
(188, 0): 0 - 0 - 0 - 0
(189, 0): 0 - 0 - 0 - 0
(190, 0): 0 - 0 - 0 - 0
(191, 0): 0 - 0 - 0 - 0
(192, 0): 0 - 0 - 0 - 0
(193, 0): 0 - 0 - 0 - 0
(194, 0): 0 - 0 - 0 - 0
(195, 0): 0 - 0 - 0 - 0
(196, 0): 0 - 0 - 0 - 0
(197, 0): 0 - 0 - 0 - 0
(198, 0): 0 - 0 - 0 - 0
(199, 0): 0 - 0 - 0 - 0
(200, 0): 0 - 0 - 0 - 0
(201, 0): 0 - 0 - 0 - 0
(202, 0): 0 - 0 - 0 - 0
(203, 0): 0 - 0 - 0 - 0
(204, 0): 0 - 0 - 0 - 0
(205, 0): 0 - 0 - 0 - 0
(206, 0): 0 - 0 - 0 - 0
(207, 0): 0 - 0 - 0 - 0
(208, 0): 0 - 0 - 0 - 0
(209, 0): 0 - 0 - 0 - 0
(210, 0): 0 - 0 - 0 - 0
(211, 0): 0 - 0 - 0 - 0
(212, 0): 0 - 0 - 0 - 0
(213, 0): 0 - 0 - 0 - 0
(214, 0): 0 - 0 - 0 - 0
(215, 0): 0 - 0 - 0 - 0
(216, 0): 0 - 0 - 0 - 0
(217, 0): 0 - 0 - 0 - 0
(218, 0): 0 - 0 - 0 - 0
(219, 0): 0 - 0 - 0 - 0
(220, 0): 0 - 0 - 0 - 0
(221, 0): 0 - 0 - 0 - 0
(222, 0): 0 - 0 - 0 - 0
(223, 0): 0 - 0 - 0 - 0
(224, 0): 0 - 0 - 0 - 0
(225, 0): 0 - 0 - 0 - 0
(226, 0): 0 - 0 - 0 - 0
(227, 0): 0 - 0 - 0 - 0
(228, 0): 0 - 0 - 0 - 0
(229, 0): 0 - 0 - 0 - 0
(230, 0): 0 - 0 - 0 - 0
(231, 0): 0 - 0 - 0 - 0
(232, 0): 0 - 0 - 0 - 0
(233, 0): 0 - 0 - 0 - 0
(234, 0): 0 - 0 - 0 - 0
(235, 0): 0 - 0 - 0 - 0
(236, 0): 0 - 0 - 0 - 0
(237, 0): 0 - 0 - 0 - 0
(238, 0): 0 - 0 - 0 - 0
(239, 0): 0 - 0 - 0 - 0
(240, 0): 0 - 0 - 0 - 0
(241, 0): 0 - 0 - 0 - 0
(242, 0): 0 - 0 - 0 - 0
(243, 0): 0 - 0 - 0 - 0
(244, 0): 0 - 0 - 0 - 0
(245, 0): 0 - 0 - 0 - 0
(246, 0): 0 - 0 - 0 - 0
(247, 0): 0 - 0 - 0 - 0
(248, 0): 0 - 0 - 0 - 0
(249, 0): 0 - 0 - 0 - 0
(250, 0): 0 - 0 - 0 - 0
(251, 0): 0 - 0 - 0 - 0
(252, 0): 0 - 0 - 0 - 0
(253, 0): 0 - 0 - 0 - 0
(254, 0): 0 - 0 - 0 - 0
(255, 0): 0 - 0 - 0 - 255

全部buckets除最后一个 alpha 值外均为 0。我想知道是否有人曾经使用过这个过滤器,并且好心地向我解释......非常感谢!


我在这里写了一篇关于如何执行此操作的帖子:http://shapeof.com/archives/2011/08/drawing_a_histogram_with_core_image.html

它的缺点是:您需要将值读取为浮点数,而不是整数,这意味着您必须连接一个 CGBitmapContext 来进行 blit。或者,如果您将所有内容保留在 CI 中,则需要另一个过滤器来读取数据并用它打印一些内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CIAreaHistogram 给我的除了最后一个元素之外全是 0? 的相关文章

  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • 如何将字符串日期转换为 NSDate?

    我想转换字符串 2014 07 15 06 55 14 198000 00 00 to an NSDate在斯威夫特 尝试这个 let dateFormatter NSDateFormatter dateFormatter dateForm
  • iOS 中的 CSV 逐行解析

    我正在 Objective c 中解析 CSV 文件 该文件包含如下内容 line 40 Rising searches line 41 nabi avc Breakout line 42 stonewall 700 line 43 med
  • 为什么这个谓词格式会变成 '= nil'

    有人建议这个线程 https stackoverflow com questions 40686005 nspredicate crash after swift 3 migration与我的问题完全相同 但是 我的应用程序没有崩溃 并且我
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged
  • init 中的 Swift 通用约束

    我有通用的 我希望能够用特定的约束来初始化它 约束仅用于初始化 班里的其他人并不关心 这是一个简化的示例 struct Generic
  • 在视图控制器之间传递数据使用从嵌入导航控制器的视图到 tabbarcontroller 的 Segue

    我有两个视图 我想将数据从一个视图传递到下一个视图 第一个视图是我想要传递给下一个视图的数据的地方 我们称之为SourceViewController 然而SourceViewController嵌入在一个NavigationViewCon
  • 使用 UISearchBar 过滤数组

    我目前正在使用以下代码来过滤数组并将结果显示在我的 tableView 中 问题是 只有当搜索与确切的单词匹配时 才会返回结果 如何更改数组过滤器以在输入时搜索每个字符 let data Mango Grape Berry Orange A
  • 为沙盒 Cocoa 应用程序创建临时文件

    我的应用程序是沙箱化的 根据最新的应用程序商店指南 我想创建一些临时文件 我可以这样做吗 如果 是 我可以在哪里这样做 有没有预先指定的路径 还有访问该路径的命令 您应该使用NSTemporaryDirectory 函数 它将查找并返回适合
  • 如何使 for 循环以与 NSLog(@"%@", arrData) 相同的顺序迭代

    我执行了以下代码NSLog arrData 调试器中的输出预计如下所示 0 first name John 1 first name Florence 2 first name Melinda 3 first name Zack 然后我执行
  • iOS:Swift - 如何在触摸时向地图添加精确定位并获取该位置的详细地址?

    我想在 iOS 地图的触摸上添加注释并获取各个位置的详细地址 地标 我如何在 Swift 中实现这一目标 提前致谢 要对地图上的触摸做出反应 您需要为地图视图设置点击识别器 in viewDidLoad let gestureRecogni
  • 如何在 UICollectionView 的节标题中动态添加标签和按钮?

    请帮助我如何水平添加标签和水平添加类似的按钮 但每个按钮应像另一个部分一样在每个标签的下方对齐 这应该在 UICollectionView 的标题中动态发生 因为标签和按钮的数量根据我的数据 我想制作一种 Excel 类型的布局 并在标题中
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排

随机推荐