Custom post-type for page header images

This can be very well achieved using Advance Custom Field (ACF) plugin. In your header image post type I suggest you also add support for title so that you can easily identify the header images in the listing. For that you just need to update

'supports' => array('title','thumbnail')

As for your main question of assigning one header image per page; once you install ACF plugin create a Field Group and a Field in that. Please refer below screenshot which will give you exact idea.

enter image description here

Then on ‘Edit page’ you will see a “Page Header Image” metabox as shown in below screenshot:

Page header image meta box on edit page screen

If you follow the settings as seen in first ACF screenshot then the above meta box will allow only one image per page. After all this is done, you can use following code to retrieve the header image assigned to a page:


  $page_header_img = get_post_meta(get_the_ID(), 'page_header_image' ,true);
  echo get_the_post_thumbnail($page_header_img[0]);

I hope this helps.